How to loop through child elements of XML type data column in talend

时光怂恿深爱的人放手 提交于 2019-12-12 06:16:10

问题


I want to migrate data from an old table which has one column which has data in XML form. I am trying to break the XML using talend but always getting the first element again and again. This is the data i have in my OLD DB:

ID                                              DETAIL
1               <ORDER_DETAIL>
                 <PACK>
                  <ID>703</ID>
                  <NAME>iPhone 6-16 GB-Space Grey-KD 57 Pack</NAME>
                  <STANDALONE_PRICE>0</STANDALONE_PRICE>
                  <MONTHLY_PRICE>57</MONTHLY_PRICE>
                  <UPFRONT_PRICE>0</UPFRONT_PRICE>
                 <ITEMS>
                  <ITEM>
                   <ID>177</ID>
                   <NAME>Bundle_2500_30GB_UNLIMITED</NAME>
                   <ROLE>Primary</ROLE>
                   <TYPE>Service</TYPE>
                   <ITEM_MINUTES>2500|Local Mins.</ITEM_MINUTES>
                   <ITEM_MESSAGES>Unlimited|SMS and MMS</ITEM_MESSAGES>
                   <ITEM_INTERNET>30 GB|4G LTE Internet</ITEM_INTERNET>
                  </ITEM>
                  <ITEM>
                     <ID>226</ID>
                     <NAME>Gold</NAME>
                     <ROLE>Primary</ROLE>
                     <TYPE>SIM</TYPE>
                     <NUMBER_CLASS>G</NUMBER_CLASS>
                  </ITEM>
                  <ITEM>
                     <ID>560</ID>
                     <NAME>iPhone 6 - 16 GB - Space Grey</NAME>
                     <ROLE>Primary</ROLE>
                     <TYPE>Device</TYPE>
                     <COLOR>Space Gray|#808080</COLOR>
                     <SIZE>16 GB</SIZE>
                  </ITEM>
                  <ITEM>
                     <ID>561</ID>
                     <NAME>4G LTE Hotspot - 0 GB - Black</NAME>
          <ROLE>Secondary Optional</ROLE>
          <TYPE>Device</TYPE>
          <COLOR>Black|#000000</COLOR>
          <SIZE>16 GB</SIZE>
       </ITEM>
    </ITEMS>
</PACK>
</ORDER_DETAIL>

I am getting below output:

    -------------+--------------------------+--------.
|                    tLogRow_2                    |
|=------------+--------------------------+-------=|
|pivot_key    |pivot_value               |ORDER_ID|
|=------------+--------------------------+-------=|
|NAME         |Bundle_2500_30GB_UNLIMITED|3150711 |
|ID           |177                       |3150711 |
|ROLE         |Primary                   |3150711 |
|TYPE         |Service                   |3150711 |
|ITEM_MINUTES |2500|Local Mins.          |3150711 |
|ITEM_MESSAGES|Unlimited|SMS and MMS     |3150711 |
|ITEM_INTERNET|30 GB|4G LTE Internet     |3150711 |
|SIZE         |16 GB                     |3150711 |
|COLOR        |Space Gray|#808080        |3150711 |
|NUMBER_CLASS |G                         |3150711 |
|NAME         |Bundle_2500_30GB_UNLIMITED|3150711 |
|ID           |177                       |3150711 |
|ROLE         |Primary                   |3150711 |
|TYPE         |Service                   |3150711 |
|ITEM_MINUTES |2500|Local Mins.          |3150711 |
|ITEM_MESSAGES|Unlimited|SMS and MMS     |3150711 |
|ITEM_INTERNET|30 GB|4G LTE Internet     |3150711 |
|SIZE         |16 GB                     |3150711 |
|COLOR        |Space Gray|#808080        |3150711 |
|NUMBER_CLASS |G                         |3150711 |
|NAME         |Bundle_2500_30GB_UNLIMITED|3150711 |
|ID           |177                       |3150711 |
|ROLE         |Primary                   |3150711 |
|TYPE         |Service                   |3150711 |
|ITEM_MINUTES |2500|Local Mins.          |3150711 |
|ITEM_MESSAGES|Unlimited|SMS and MMS     |3150711 |
|ITEM_INTERNET|30 GB|4G LTE Internet     |3150711 |
|SIZE         |16 GB                     |3150711 |
|COLOR        |Space Gray|#808080        |3150711 |
|NUMBER_CLASS |G                         |3150711 |
|NAME         |Bundle_2500_30GB_UNLIMITED|3150711 |
|ID           |177                       |3150711 |
|ROLE         |Primary                   |3150711 |
|TYPE         |Service                   |3150711 |
|ITEM_MINUTES |2500|Local Mins.          |3150711 |
|ITEM_MESSAGES|Unlimited|SMS and MMS     |3150711 |
|ITEM_INTERNET|30 GB|4G LTE Internet     |3150711 |
|SIZE         |16 GB                     |3150711 |
|COLOR        |Space Gray|#808080        |3150711 |
|NUMBER_CLASS |G                         |3150711 |
'-------------+--------------------------+--------'

Getting first element of all child nodes again and again. This is my job: tOracleInput-->tMap>tExtraxtXMLField-->tUnPivotRow--tLogRow

Someone please help me on this


回答1:


Do you set up "as optional loop" for your tag in tXmlMap?

You can try to read "Items" separatly, using tExtractXmlFiled with "Loop XPATH query" : "/ORDER_DETAIL/ITEMS" and then "tFlowToIterate".



来源:https://stackoverflow.com/questions/28106808/how-to-loop-through-child-elements-of-xml-type-data-column-in-talend

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!