2011-02-14 5 views
3

У меня есть эта работа в Talend, которая должна извлекать поле и прокручивать его.Talend tExtractXMLField

Моя большая проблема заключается в том, что код циклически перемещается по полям XML, но возвращает значение null. Вот образец XML:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<empresas> 
    <empresa> 
     <imoveis> 
      <imovel> 
       [-- some fields -- ] 

       <fotos> 
        <nome id="" order="">photo1</nome> 
        <nome id="" order=""></nome> 
        <nome id="" order=""></nome> 
        <nome id="" order=""></nome> 
       </fotos> 
      </imovel> 
      [ -- other entries here -- ] 
     </imoveis> 
    </empresa> 
</empresas> 

Теперь с помощью компонента tExtractXMLField я пытаюсь получить элемент «Fotos». Вот что я имею в компоненте: enter image description here

Я попытался изменить запрос XPath и запрос цикла XPath, но результат либо я не проходное поле или я получаю нуль в значении поле в tMap.

Вот образ работы:

enter image description here

Вы можете видеть, что я извлекаться 4 элементов из XML, но то, что я получаю нуль в поле «Номе». Там должно быть что-то не так с XPath, но я не могу найти проблему :(

Надежда кто-то может помочь мне спасибо . Примечания: Я использую talendv4.1.2 на убунту 10,10 64bit

ответ

0

Try чтобы изменить свой цикл xpath на верхний уровень в файле «empresas». Иногда это срабатывает для меня, также мне кажется, что «? xml version =" 1.0 "encoding =" ISO-8859-1 "? прежде, вы можете попытаться удалить это.

Также убедитесь, что кодировка правильно установлена ​​в tFileInputXML.

7

Если вы хотите, чтобы петля на <nome> узлов ваш цикл XPath запросов должен быть

"/empresas/empresa/imoveis/imovel/fotos/nome" 

и foto_nome XPath Query что-то вроде

"text()" 

Позаботьтесь: Я также исправлена ​​ошибка в вашем XML, которые могут принести проблемы (</imoveis> Пропавшие без вести " s ").

1

Есть два способа сделать это. Один из способов - напрямую использовать XMLinput и инструкции, которые упомянуты bluish.

Другой способ - продолжить путь, который вы выбрали. В XMLinput убедитесь, что ваш запрос Loop XPath установлен на "/empresas/empresa/imoveis/imovel/fotos", и что вы проходите через элемент fotos с опцией Get Nodes. Запрос XPath вашего fotos элемент должен быть "../fotos" или ".".

Ваш компонент extractXMLField выглядит хорошо настроенным. Кроме того, я не знаю, что делает tSetGlobalVar в вашем дизайне, но убедитесь, что он не влияет на элемент fotos, который вы пытаетесь пройти.

1

sample talend job
Я сделал тестовую работу, это поможет вам определенно.Если я не ошибаюсь, вы хотите получить все «ном» под тегом «fotos».

0

Я думаю, вы запутываете чтение XML и извлечение XML из XML.

Чтение XML: Если часть XML, которую вы предоставили это файл вами прочитанные tFileInputXML вам не нужно tExtractXMLField, просто настроить tFileInputXML как это:

  • установить петлю XPATH в <nome> элементы, подобные этому "// nome"
  • добавить 3 столбца в идентификатор, порядок и содержимое компонента tFileInputXML
  • получить столбец контента с запросом xpath "."
  • значение ID
  • прибудете с XPATH запроса "@Id" стоимость заказа
  • получить с XPATH запроса "@order"

enter image description here

Извлечение XML из XML: То есть цель tExtractXMLField компонент: Он позволяет анализировать XML-данные, содержащиеся в столбце базы данных или другом XML-документе, как если бы он сам являлся потоком данных.

Чтобы сделать это в двух словах, tExtractXMLField создаст поток данных из записи столбца, содержащей XML. Это очень полезно при анализе результатов запроса мыльных: ответ сервера обычно предоставляются как XML, как этот:

<arg2> 
    <![CDATA[ 
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <exportInscriptionEnLigneType> 
     <date>2015-04-10</date> 
     <nbDossiers>2</nbDossiers> 
     <reference>20150410100</reference> 
     <listeDossiers> 
     <dossier> 
      <numOrdre>1</numOrdre> 
      <identifiantDossier>AAAAA</identifiantDossier> 
     </dossier> 
     <dossier> 
      <numOrdre>2</numOrdre> 
      <identifiantDossier>BBBBB</identifiantDossier> 
     </dossier> 
     </listeDossiers> 
    </exportInscriptionEnLigneType> 
]]> 
</arg2> 

В XML выше, арг2> содержит документ XML, который может потребоваться для анализа.

tExtractXMLField был создан для этой цели. Я написал учебное пособие о том, как достичь этой работы, пожалуйста, посмотрите здесь «how to extract xml from xml». Это на французском, но скриншоты могут помочь понять несколько предоставленных комментариев.

Надеюсь, это поможет.

С уважением,