Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Talend tExtractXMLField_Java_Xml_Xpath_Talend - Fatal编程技术网

Java Talend tExtractXMLField

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 -- ]

我在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>

[--某些字段--]
照片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”获取订单值

从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> 
”。它是用法语写的,但屏幕截图可能有助于理解提供的少量注释

希望这会有帮助

致以最良好的祝愿