9

I have a xml like

<root xmlns:ns1="http://foo">
    <ns1:child1>Text</ns1:child1>
    <ns1:child2>Number</ns1:child2>
</root>

Now I get this from different persons, so that for example person 2 sends me another message with the same structure like

<root xmlns:anotherNs="http://foo">
    <anotherNs:child1>Another Text</anotherNs:child1>
    <anotherNs:child2>Another Number</anotherNs:child2>
</root>

So the only difference is the name of the namespace. How can I select the content of child2 for both xml's with one XPath expression?

Something like "/root/child2" or "//child2" did not work.

2 Answers 2

22

Use the local-name() function like so:

//*[local-name()='child2']
Sign up to request clarification or add additional context in comments.

Comments

2

You can bind any prefix you like (say banana) to the namespace "http://foo", and the expression /root/banana:child2 will find the child2 element, regardless what namespace prefix has been used in the source document. Only the namespace URI has to match.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.