I could not get the following xpath expression to work when the xml path namespace prefix set.
/bk:BookStore/bk:Books/bk:Book[text()='Time Machine']
XML is:
<BookStore xmlns:bk="http://www.bookstore.com/book#">
<bk:Books>
<bk:Book id="1">Time Machine></bk:Book>
</bk:Books>
</bk:BookStore>
Or even better (and more portable), without the unnecessary prefix:
/*/*[local-name()='Books'] ... and so on
The function local-name
ignores any prefix, which, as correctly stated by commenters, can vary.
Without more information about the host language (in which you attempt to evaluate XPath expressions) it is not possible to provide an useful recommendation.
Generally, one needs to "register" a namespace with a namespace manager and this also associates a prefix to the registered namespace. Then, using this NamespaceManager object as an argument to the XPath-evaluation method, one can specify as argument to this method an XPath expression that contains names prefixed by that particular prefix.
Workarounds:
/*/*[name()='bk:Books']/*[name()='bk:Book' and text()='Time Machine']
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With