Is this simple XPath query correct?
I have a document that has the following format:
<Root>
<A />
<C />
<B />
<A>
<B>
<A />
<C />
</B>
</A>
</Root>
I want to "catch" 开发者_Python百科all the elements A and B and list them in a new doc:
<A /> <B /> <A /> <B /> ...
With XPath, would the query be (with Root as the context node):
.//*[A | B]
Use:
//*[self::A or self::B]
This selects all elements in the document that are either A or B.
Traverses the document only once :)
Based on Welbog's answer, I came up with this one:
.//*[name()="A" or name()="B"]
It does what is supposed.
You could simply write //A|//B (The previous one didn't seem to work except in one online xpath tester, that'll teach me to trust them). Although this would traverse the tree twice.
Your original expression said: give me all the elements (//*) that have a child called A or B ([A|B]), because when the predicate part (the [] bit) is evaluated, the context node is alraedy the node you're examining, so anything within the predicate is relative to that context.
加载中,请稍侯......
精彩评论