Java Talend tExtractXMLField
我在Talend有一个任务,应该是检索一个字段并循环遍历它 我最大的问题是代码在XML字段中循环,但返回null。 以下是XML的一个示例:Java Talend tExtractXMLField,java,xml,xpath,talend,Java,Xml,Xpath,Talend,我在Talend有一个任务,应该是检索一个字段并循环遍历它 我最大的问题是代码在XML字段中循环,但返回null。 以下是XML的一个示例: <?xml version="1.0" encoding="ISO-8859-1"?> <empresas> <empresa> <imoveis> <imovel> [-- some fields -- ]
<?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>
[--某些字段--]
照片1
[--此处的其他条目--]
现在使用tExtractXMLField组件,我试图获取“fotos”元素。
以下是我在组件中的内容:
我尝试更改XPath查询和XPath循环查询,但结果是要么我没有循环该字段,要么我在tMap的值字段中得到null
以下是该作业的图像:
您可以看到,我从XML中检索了4项,但在“nome”字段中得到的是null。XPath肯定有问题,但我似乎找不到问题:(
希望有人能帮我。谢谢
注意:我在ubuntu 10.10 64位上使用talendv4.1.2,尝试将循环xpath更改为文件“empresas”的顶层。有时这对我来说很有效,而且我以前也使用过“?xml version=“1.0”encoding=“ISO-8859-1”标记导致问题,您可以尝试删除它
还要确保在tFileInputXML中正确设置了编码。如果要在
节点上循环,则必须执行循环XPath查询
"/empresas/empresa/imoveis/imovel/fotos/nome"
和foto_nome XPath查询类似
"text()"
注意:我还纠正了XML中可能带来问题的错误(
缺少“s”)。有两种方法。一种方法是直接使用XMLinput和蓝色的说明
另一种方法是继续您选择的路径。在XMLinput中,确保循环XPath查询设置为“/empresas/empresas/imoveis/imovel/fotos”
,并且您通过fotos元素时选中了Get Nodes选项。fotos元素的XPath查询应该是”。/fotos“
或”
您的extractXMLField组件看起来配置良好。
另外,我不知道tSetGlobalVar在您的设计中起什么作用,但请确保它不会影响您试图通过的fotos元素。我做了一个测试工作,这肯定会对你有帮助。如果我没有错的话,你想把所有的“nome”都放在“fotos”标记下。我认为你在混淆读取XML和从XML中提取XML 阅读XML: 如果您提供的XML部分是由您读取的文件tFileInputXML,则不需要tExtractXMLField,只需将tFileInputXML配置为:
- 将xpath循环设置为
元素,如下所示“//nome” - 在tFileInputXML组件id、顺序和内容中添加3列
- 使用xpath查询“”获取内容列
- 使用xpath查询“@id”获取id值
- 使用xpath查询“@order”获取订单值
<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>
”。它是用法语写的,但屏幕截图可能有助于理解提供的少量注释
希望这会有帮助
致以最良好的祝愿