Получение элементов с пространством имен по умолчанию (без префикса пространства имен) с использованием XPath

В этом XML файле SOAP, как я могу получить 7 при использовании запроса XPath?

<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>

Этот запрос XPath не работает //*[name () ='soap:Body'].

Ответ 1

Если у вас установлен префикс пространства имен, вы можете его использовать, например:

//soap:Body

Но поскольку узлы, с которыми вы пытаетесь использовать пространство имен по умолчанию, без префикса, используя простой XPath, вы можете использовать только атрибуты local-name() и namespace-uri(). Примеры:

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

Или:

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

Или:

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

В ваш xml все они будут давать одинаковый результат, текст 7.