编辑:我想我找到了答案,但我会稍微公开一下,看看是否有人有改正/改善。
我在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 开始日期。我想要1/1/2001,而不是2/3/2004,因为受抚养人的利益具有ABC的好处,使员工的利益与相同的利益名相匹配。
相对于/ root / employee / dependent / benefits / benefit的xpath将产生的值 为父母雇员提供的福利的benefit_start,其利益名称与 从属福利名称? (注意我提前不知道字面值是什么,我不能只查找'ABC',我必须匹配依赖的benefitname元素中的任何值。
我正在尝试:
../../../ benefits / benefit [benefitname = ?? what ??] / benefit_start
我不知道如何在中间引用当前节点的祖先 xpath(因为我认为“。”在我所指的那一点上将会引用 员工/福利的福利节点。
编辑:我想我想要的是“current()/ benefitname”里面的?? ??是。似乎与撒克逊人合作,我还没有在etl工具中尝试过它。答案 0 :(得分:1)
你的XML格式不正确,我认为你没有很好地描述你的siduation(你正在尝试的XPath在开始时有一堆../../
,但你还没有说什么无论你是在迭代某些节点还是在什么节点上,上下文节点都是。
假设当前上下文节点是employee
元素,您可以选择与{x>}相匹配的benefit_start
benefits/benefit[benefitname = ../../dependent/benefits/benefit/benefitname]
/benefit_start
如果当前上下文节点是benefit
部分中的dependents
元素,并且您希望仅为当前benefit_start
元素获取相应的benefit
,则可以做:
../../../benefits/benefit[benefitname = current()/benefitname]/benefit_start
我认为你已经发现了这一点。