这是一个初学者的问题,但到目前为止我还没有找到答案。
我正在使用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。
非常感谢任何帮助!
答案 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()
或考虑