3

我在 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 的值字段中得到空值。

这是该工作的图像:

在此处输入图像描述

您可以看到我已经从 XML 中检索了 4 个项目,但在“nome”字段中我得到的是 null。XPath 一定有问题,但我似乎找不到问题:(

希望有人可以帮助我。谢谢 注意:我在 ubuntu 10.10 64bit 上使用 talendv4.1.2

4

5 回答 5

7

如果要在<nome>节点上循环,则 Loop XPath Query 必须是

"/empresas/empresa/imoveis/imovel/fotos/nome"

和 foto_nome XPath 查询类似

"text()"

注意:我还纠正了您的 XML 中可能带来问题的错误(</imoveis>缺少“s”)。

于 2011-09-30T07:42:41.843 回答
1

样例工作
我做了一个测试工作,这肯定会帮助你。如果我没记错的话,你想获得“fotos”标签下的所有“nome”。

于 2014-12-10T07:08:36.713 回答
1

有两种方法可以解决。一种方法是直接使用 XMLinput 和蓝色提到的指令。

另一种方法是继续你选择的道路。在 XMLinput 中,确保您的 Loop XPath 查询设置为"/empresas/empresa/imoveis/imovel/fotos",并且您通过fotos元素并选中了Get Nodes选项。您的fotos元素的 XPath 查询应该是"../fotos""."

您的 extractXMLField 组件看起来配置良好。另外,我不知道 tSetGlobalVar 在您的设计中做了什么,但请确保它不会影响您尝试通过的fotos元素。

于 2011-11-04T11:03:18.710 回答
0

尝试将循环 xpath 更改为文件“empresas”中的顶层。有时这对我有用,我也似乎“?xml版本=“1.0”编码=“ISO-8859-1”?标签之前会导致问题,您可以尝试将其删除。

还要确保在 tFileInputXML 中正确设置了编码。

于 2011-06-23T17:53:32.887 回答
0

我认为您对阅读 XML 和从 XML 中提取 XML 感到困惑。

读取 XML:如果您提供的 XML 部分是您读取的文件 tFileInputXML,则不需要 tExtractXMLField,只需将 tFileInputXML 配置为:

  • 将 xpath 循环设置为<nome>元素,例如“//nome”
  • 在 tFileInputXML 组件 id、order 和 content 中添加 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>element 包含您可能需要解析的 XML 文档。

为此目的创建了 tExtractXMLField。我写了一篇关于如何完成这项工作的教程,请看这里“如何从 xml 中提取 xml ”。它是法语的,但屏幕截图可能有助于理解所提供的少数评论。

希望它会有所帮助。

此致,

于 2015-12-27T07:44:16.230 回答