1

我正在尝试通过“添加 XML”步骤在转换中将 xml 代码与 Pentaho PDI 连接,该步骤添加了一些字段,其中“根 XML 元素”设置为“节点”(如下所示)和“XML 加入”步骤。

我想在每个“节点”中插入一些具有相同数据的字段。

<Rootnode>
 <Node>
 <Node>
 <Node>
</Rootnode>

问题是,无论我尝试什么 XPath 表达式,我要插入的字段都只插入到第一个节点中。“RootNode/Node”或“//Node”之类的表达式不起作用。

这是我得到的结果:

<RootNode>
   <Node>
    <inserted field>
  <Node>
  <Node>
</RootNode>

这就是我想要得到的:

<RootNode>
  <Node>
    <inserted field>
  <Node>
    <inserted field>
  <Node>
    <inserted field>
</RootNode>

问题:XML 连接步骤是否只能将代码连接到一个明确指定的节点中,或者我可以在 XML 连接步骤的 XPath 语句输入中使用 XPath 表达式将代码插入到我选择的所有节点中吗?

(我认为带有比较字段的复杂连接不合适,因为我没有任何可比较的东西。)

4

1 回答 1

0

是的,您可以以重复的方式读取 XML 节点。检查这个:如何从 pentaho 中的重复节点中提取 XML 节点值和重复节点?解决方案。您需要在 Fields 部分正确定义 XPATH。“.”(点)的使用在这里很重要。

现在对于您的问题,您需要应用与上述相同的逻辑,但稍作更改。检查下图:

在此处输入图像描述

我在这里所做的是:

  1. 首先,获取Rootnode结构,稍后我将使用它来加入(图像中 ktr 的第一行)

  2. 其次,我Node以重复的方式阅读了所有内容,如上述链接中所述。检查下图:

在此处输入图像描述

  1. 添加一个常量字段。这是您的新字段节点。我已用作newField节点名称。

在“添加 XML”部分中,将此新字段添加到该Node部分。

  1. XML Join:在此步骤中,将加入条件设为//Rootnode。这将与Rootnode“第 1 点”的进来相结合。

在此处输入图像描述

  1. 最后生成 XML 输出(target.xml)

    在此处输入图像描述

如上所述,我已经放置了.ktr 的要点。请看一看。

注意:source.xml 文件与问题中的相同。


处理复杂的 XML 结构:

正如下面评论中强调的那样,上述方法在处理复杂的 xml 结构时会失败。因此,为了实现这一点,我们需要使用“XML 输入流 (StAX)”步骤,该步骤使用 StAX 解析器轻松读取复杂的 XML 结构。

我已经在这个博客中记录了相同的内容以及要点。请检查一下!我认为这也适用于您的数据集。

希望能帮助到你 :)

于 2015-03-01T15:38:18.503 回答