我面临着一个无法解决的困难请求。
例如,这是我们的xml数据库:
<root>
<A>
<B attr="b">
...
</B>
<C attr="c">
...
</C>
</A>
<A>
<B attr="b">
...
</B>
<C attr="c">
...
</C>
</A>
<A>
<B attr="notb">
...
</B>
<C attr="notc">
...
</C>
</A>
</root>
问题是:根的 A 元素子元素是什么,它们在它们的子元素 B 和 C 中具有公共属性 attr。
在我们的例子中,第一个元素A和第二个元素A应该在awnser中,因为它们的属性attr在B和C中相等
。提前感谢您的帮助。
试试这个:
//A[B/@attr=following-sibling::A/B/@attr and C/@attr=following-sibling::A/C/@attr]
诀窍是使用following-sibling
轴,因此您可以查找下一个元素,而不是以前的元素。
有关 XPath 轴的更多信息,请参见此处。
正如安德森在评论中指出的那样,它应该是:
//A[
(
B/@attr=following-sibling::A/B/@attr and
C/@attr=following-sibling::A/C/@attr
)
or
(
B/@attr=preceding-sibling::A/B/@attr and
C/@attr=preceding-sibling::A/C/@attr
)]