Talend tExtractXMLField

我在Talend中有这个工作,应该检索一个字段并循环遍历它。 我的大问题是代码循环遍历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”元素。 以下是我在组件中的内容: 我试图更改XPath查询和XPath循环查询,但结果是我不循环遍历字段或我在tMap的值字段中获取null。 这是工作的形象: 你可以看到我从XML中检索了4个项目但是我在“nome”字段中得到的是null。 XPath肯定有问题,但我似乎无法找到问题:( 希望有人可以帮助我。谢谢 注意:我在ubuntu 10.10 64bit上使用talendv4.1.2     
已邀请:
如果要在
<nome>
节点上循环,则必须使用循环XPath查询
"/empresas/empresa/imoveis/imovel/fotos/nome"
和foto_nome XPath查询类似的东西
"text()"
注意:我还纠正了XML中可能带来问题的错误(
</imoveis>
缺少“s”)。     
有两种方法可以解决它。一种方法是直接使用XMLinput和蓝色提到的指令。 另一种方法是继续你选择的路径。在XMLinput中,确保将Loop XPath查询设置为
"/empresas/empresa/imoveis/imovel/fotos"
,并通过选中了Get Nodes选项的fotos元素。你的fotos元素的XPath查询应该是
"../fotos"
"."
。 您的extractXMLField组件看起来配置得很好。 另外,我不知道tSetGlobalVar在你的设计中做了什么,但确保它不会影响你试图通过的fotos元素。     
我做过一份测试工作,这对你肯定有帮助。如果我没错,你想得到“fotos”标签下的所有“nome”。     
尝试将循环xpath更改为文件中的顶级“empresas”。有时这对我有用,我似乎也有“?xml version =”1.0“encoding =”ISO-8859-1“?”标签之前导致问题,您可以尝试删除它。 还要确保在tFileInputXML中正确设置了编码。     
我认为你在阅读XML和从XML中提取XML时感到困惑。 阅读XML: 如果您提供的XML部分是由tFileInputXML处理的文件,则不需要tExtractXMLField,只需将tFileInputXML配置为: 将xpath循环设置为
<nome>
元素,就像这个“// nome” 在tFileInputXML组件id,顺序和内容中添加3列 获取带有xpath查询的内容列“。” 使用xpath查询“@id”获取id值 使用xpath查询“@order”获取订单值 从XML中提取XML: 这是tExtractXMLField组件的目标: 它允许解析数据库列或其他XML文档中包含的XML数据,就好像它本身就是一个数据流一样。 简而言之,tExtractXMLField从包含XML的列记录创建数据流。 解析soap查询结果时非常有用:服务器回复通常以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”。它是法语,但屏幕截图可能有助于理解提供的一些评论。 希望它会有所帮助。 最好的祝福,     

要回复问题请先登录注册