Talend tExtractXMLField - PullRequest
       11

Talend tExtractXMLField

3 голосов
/ 14 февраля 2011

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

Моя большая проблема заключается в том, что код циклически перебирает поля XML, но возвращает ноль.Вот пример 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 на Ubuntu 10.10 64bit

Ответы [ 5 ]

7 голосов
/ 30 сентября 2011

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

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

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

"text()"

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

1 голос
/ 10 декабря 2014

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

1 голос
/ 04 ноября 2011

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

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

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

0 голосов
/ 27 декабря 2015

Я думаю, что вы путаете чтение 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 элемент arg2> содержит XML-документ, который вам может понадобиться для анализа.

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

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

С уважением,

0 голосов
/ 23 июня 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...