xpath - 当前节点中child的匹配值与parent中element的值

时间:2013-06-14 23:13:42

标签: xpath talend

编辑:我想我找到了答案,但我会稍微公开一下,看看是否有人有改正/改善。

我在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工具中尝试过它。

1 个答案:

答案 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

我认为你已经发现了这一点。