Kettle 5.0.1中的XPath令牌语法

时间:2013-12-13 19:55:23

标签: xml xpath pentaho kettle

这是一个初学者的问题,但到目前为止我还没有找到答案。

我正在使用Kettle中的“从XML获取数据”输入转换,我在理解XPath的语法时遇到了一些麻烦。

查看所有示例转换文件,似乎以相当简单的方式指定了XPath。

如果我的xml文件包含:

<A>
 <B>
   <C att1='fruit' att2='banana'>
   </C>
   <C att1='vegetable' att2='lettuce'>
   </C>   
 </B>
</A>

我想获得att1'水果',我只需在Field XPath中键入以下内容:

A/B/C/@att1

但是,Kettle不接受这种语法。它坚持将XPath编写为:

*[name()='A']/*[name()='B']/*[name()='C']/@att1

这很好。但是,一旦XPath变得更复杂,例如当我想使用令牌时,我对如何编写它感到有点迷失。

现在说我想读取att2的值,但前提是att1是'vegetable'。我会这样写,使用令牌:

A/B/C[@att1='vegetable']/@att2

但是我怎么用Kettle的语法写这个呢?

另外,不确定这是否相关,但我在Windows 7上运行Kettle 5.0.1。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

如果

A/B/C/@att1

转变为:

*[name()='A']/*[name()='B']/*[name()='C']/@att1

然后

A/B/C[@att1='vegetable']/@att2

应该是:

*[name()='A']/*[name()='B']/*[name()='C' and @att1='vegetable']/@att2

但是,这种奇怪的转换可能与您使用命名空间的方式有关。

您可能希望将name()替换为local-name()或考虑