问题
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