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

В этом файле SOAP XML, как я могу получить 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,

Другие вопросы по тегам