首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xpath -将当前节点的子节点的值与父节点中的元素的值进行匹配

xpath -将当前节点的子节点的值与父节点中的元素的值进行匹配
EN

Stack Overflow用户
提问于 2013-06-15 07:13:42
回答 1查看 850关注 0票数 0

编辑:我想我找到了答案,但我会留下一些开放的一段时间,看看是否有人有更正/改进。

我在Talend的etl工具中使用xpath。我有这样的xml:

代码语言:javascript
复制
<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工具中尝试过。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-15 13:17:36

您的XML格式不正确,我认为您没有很好地描述自己的想法(您正在尝试的XPath在一开始有一堆../../,但是您没有说明上下文节点是什么,您是否正在遍历某些节点等等)。

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

代码语言:javascript
复制
benefits/benefit[benefitname = ../../dependent/benefits/benefit/benefitname]
                                                                       /benefit_start

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

代码语言:javascript
复制
../../../benefits/benefit[benefitname = current()/benefitname]/benefit_start

我想这就是你已经发现的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17118582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档