0

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

我在 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 将为具有与从属福利名称相同的福利名称的父员工下的福利产生福利起始值?(注意我不提前知道字面值是什么,我不能只寻找'ABC',我必须匹配依赖项的利益名称元素中的任何值。

我正在努力:

../../../benefits/benefit[benefitname=??what??]/benefit_start

我不知道如何在 xpath 中间引用当前节点的祖先(因为我认为“。”在我有 ??what?? 时将引用员工/福利的福利节点。

编辑:我想我想要的是“current()/benefitname” ??what?? 是。似乎可以与撒克逊人一起使用,我还没有在 etl 工具中尝试过。

4

1 回答 1

1

您的 XML 格式错误,我认为您没有很好地描述您的情况(您尝试的 XPath../../开头有一堆 s,但您没有说上下文节点是什么,无论您是重复某些节点,或者什么。

假设当前上下文节点是一个employee元素,您可以选择benefit_start与相关收益匹配的 s

benefits/benefit[benefitname = ../../dependent/benefits/benefit/benefitname]
                                                                       /benefit_start

如果当前上下文节点是一个benefit部分中的一个元素dependents,并且您想benefit_start仅获取当前benefit元素的对应项,您可以执行以下操作:

../../../benefits/benefit[benefitname = current()/benefitname]/benefit_start

这是我认为你已经发现的。

于 2013-06-15T05:17:35.533 回答