我遇到了以下问题:
使用xpath表达式我必须对匹配标记值的所有前面的兄弟节点求和。 实际上我在最后一个节点元素上有一定的id。
相对于这个位置,我必须输出所有前面兄弟的总和,它们与./id
中的相同id相匹配出于架构原因,我仅限于xpath 2.0,必须使用xpath表达式找到解决方案。
样本结构
<root>
...
<element>
<id>198</id>
<sum>1</sum>
</element>
<element>
<id>198</id>
<sum>0</sum>
</element>
<element>
<id>267</id>
<sum>2</sum>
</element>
<element>
<id>267</id>
<sum>0</sum>
</element>
<element>
<id>267</id>
<sum>0</sum>
</element>
<element>
<id>267</id>
<sum>0</sum>
</element>
<element>
<id>3123</id>
<sum>34</sum>
</element>
<element>
<id>3123</id>
<sum>0</sum>
</element>
<element>
<id>3123</id>
<sum>0</sum>
</element>
...
</root>
我试过了:
sum(preceding-sibling::element[./id = self::*/id]/sum)
表达式的结果与预期值不匹配: 该表达式总结了位于起始元素之前的所有标记的值,而不仅仅是特定标记的值。
我想得到以下结果:
最后一个id为198的元素,结果应为1
最后一个id为267的元素,结果应为2
最后一个id为3123的元素,结果应为34
感谢您的任何建议。
答案 0 :(得分:0)
使用XPath 2.0,您需要使用设置变量并使用变量解析器(如何执行此操作取决于XPath API)并执行以下操作: sum(preceding-sibling::element[id = $el/id]/sum)
。使用XPath 3.0,您可以let $el := . return sum($el/preceding-sibling::element[id = $el/id]/sum)
。