22

In this SOAP XML file, how can I get the 7 on a using a XPath query?

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <HelloWorldResponse xmlns="http://tempuri.org/">
           <HelloWorldResult>7</HelloWorldResult>
        </HelloWorldResponse>
    </soap:Body>
</soap:Envelope>

This XPath query is not working //*[name () ='soap:Body'].

2
  • what are you trying to extract? Commented May 23, 2013 at 14:56
  • missing < . but is not the problem. i want number 7 Commented May 23, 2013 at 15:04

1 Answer 1

38

If you have a namespace prefix set, you could use it, like:

//soap:Body

But since the nodes you are trying to get use a default namespace, without a prefix, using plain XPath, you can only acesss them by the local-name() and namespace-uri() attributes. Examples:

//*[local-name()="HelloWorldResult"]/text()

Or:

//*[local-name()="HelloWorldResult" and namespace-uri()='http://tempuri.org/']/text()

Or:

//*[local-name()="HelloWorldResponse" and namespace-uri()='http://tempuri.org/']/*[local-name()="HelloWorldResult"]/text()

To your xml, they will all give the same result, the text 7.

Sign up to request clarification or add additional context in comments.

5 Comments

Note: If you were using a tool to execute the XPath, you could specify the namespace for that query and proceed as usual (without the workarounds above). Needless to say, each tool has a specific way of setting that.
Does this syntax only work if the node with xmlns="whatever" is the last node? I've tried this repeated times today and can't get it to work.
@Kyralessa, no, it should work wherever the node is. Maybe it is your tool. Try it online, see how it works here: tinyurl.com/ytzw6svu
I figured out my problem. I had to use the alias all the way down: root/abc:nodeWithXmlns/abc:thisOne/abc:theOneIWant
@Kyralessa Yes, in some tools, that'd work. Great, then!

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.