编辑:我想我找到了答案,但我会留下一些开放的一段时间,看看是否有人有更正/改进。
我在Talend的etl工具中使用xpath。我有这样的xml:
<root>
<employee>
<benefits>
<benefit>
<benefitname>CDE</benefitname>
<benefit_start>2/3/2004</benefit_start>
</benefit>
<benefit>
<benefitname>ABC</benefitname>
<benefit_start>1/1/2001</benefit_start>
</benefit>
</benefits>
<dependent>
<benefits>
<benefit>
<benefitname>ABC</benefitname>
</benefit>
</dependent>在解析受扶养人的福利时,我希望获得员工福利元素中的元素。因此,在上面的示例中,我希望获得1/1/2001作为受抚养人的开始日期。我希望是2001年1月1日,而不是2004年2月3日,因为受扶养人的福利具有福利名称ABC,与具有相同福利名称的员工福利相匹配。
相对于/root/ employee / dependent /benefits/ benefit,哪个xpath会为parent employee下与受依赖福利名称相同的福利生成benefit_start值?(注意,我事先不知道字面值是什么,我不能只查找'ABC',我必须匹配受依赖者的benefitname元素中的任何值。
我在试着:
../../../benefits/benefitbenefitname=??what??/benefit_start
我不知道如何在xpath中间引用当前节点的祖先(因为我认为“。在这点上我有??什么??将参照职员/福利的福利节点。
编辑:我想我想要的是"current()/benefitname“在哪里??什么??是。似乎适用于saxon,但我还没有在etl工具中尝试过。
发布于 2013-06-15 13:17:36
您的XML格式不正确,我认为您没有很好地描述自己的想法(您正在尝试的XPath在一开始有一堆../../,但是您没有说明上下文节点是什么,您是否正在遍历某些节点等等)。
假设当前上下文节点是一个employee元素,您可以选择与依赖利益相匹配的benefit_start
benefits/benefit[benefitname = ../../dependent/benefits/benefit/benefitname]
/benefit_start如果当前上下文节点是dependents部分中的benefit元素,并且您只想获取当前benefit元素的相应benefit_start,则可以执行以下操作:
../../../benefits/benefit[benefitname = current()/benefitname]/benefit_start我想这就是你已经发现的。
https://stackoverflow.com/questions/17118582
复制相似问题