In this xpath:
/A/B[C='hello']
Is C="hello"
some kind of syntactic shortcut for C[text()='hello']
? Is it documented anywhere?
Edit: Okay, I discovered one difference: C=
returns all the text nodes in C and C's children, while C[text()=
returns only the text nodes in C.
Now, suppose I have the XML:
<root>
<A>
<B>
<C>hello<E>EEE</E>world</C>
<D>world</D>
</B>
<B>
<C>goodbye</C>
<D>mars</D>
</B>
</A>
</root>
How would I choose the B node containing the first C node using the syntax C[text()=
? I can get the B node using the C=
syntax like this:
/root/A/B[C="helloEEEworld"]
But this doesn't work:
/root/A/B[C[text()="helloworld"]]
nor do these:
/root/A/B[C[text()="hello world"]]
/root/A/B[C[text()="helloEEEworld"]]
Hmmm...this works:
/root/A/B[C[text()="hello"]]
Why is that? Does text()
only return the first text node? According to the W3C, text()
returns all text node children of the context node.