【问题标题】:XML search for string XPath query talendXML 搜索字符串 XPath 查询 talend
【发布时间】:2018-04-09 10:18:35
【问题描述】:

我尝试使用 tFileInputXML 从 xml 中提取节点。我的xml结构如下提取:

<catalog>
<article>
<id>10001</id>
<name>AAAAXXXXAAA</name>
<desc>LLLLLL</desc>
</article>
</catalog>

在 tFileInputXML 中,我设置了如下参数以通过 id 查找特定产品:

问题是我的输出总是 0 行。请给我一些灯来检查为什么不能正常工作?

提前致谢。

【问题讨论】:

  • 你要检索哪个节点?
  • 按ID过滤的文章节点,记住原始xml文件有超过100万个产品。
  • 尝试循环查询为'/catelog/'
  • 文章节点是什么意思?它有子节点,你也想要那些(文章为 xml)吗?我看到你的映射中有一个 id 列..

标签: xml xpath etl talend


【解决方案1】:

我不确定您想要实现什么,但如果您想要具有特定 id(作为 xml)的文章节点,请按照以下步骤操作。

我有这个 xml 作为输入:

<?xml version="1.0" encoding="utf-8"?>
<catalog>
    <article>
        <id>10001</id>
        <name>AAAAXXXXAAA</name>
        <desc>LLLLLL</desc>
    </article>
    <article>
        <id>10002</id>
        <name>ZZZZZZZZZZ</name>
        <desc>description</desc>
    </article>
</catalog>

以下是我获取 id 为 10002 的文章节点的方法(检查 Get nodes 选项以获取 xml):

编辑

如果您正在寻找单个节点,上述方法可以正常工作。如果你想搜索多个节点,这里有一个解决方案(注意循环 XPath 查询现在是/catalog/article):

你也可以使用这个表达式self::node()[contains('10001 10002', descendant::id)]

【讨论】:

  • 太棒了!我很乐意提供帮助:)
  • 也许你知道,有没有办法像 contains("10002","10003") 那样在 xml 中搜索
  • 你是个天才
  • 您好,由于性能问题,我已将生成模式切换为快速且内存消耗较少的 (SAX),但查询似乎无法正常工作。甚至认为它适用于生成模式 DOM4j 你知道为什么吗?
  • 您好,实际上只有 Dom4j 允许使用 xpath 表达式;如果您想使用 SAX,也许您可​​以通过读取所有节点并使用 tFilterRow 过滤您想要的 id 来获得更好的性能:imgur.com/a/s8xW6 这里我提取文章及其 id,然后过滤我想要的 id。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
相关资源
最近更新 更多