使用Xpath从SOAP Message获取价值

use*_*107 3 xpath soap

我试图从以下SOAP消息中获取值,但也许我在XPath上的语法不好

XPath我正在使用:

/soap:Body/n0:RequestSystemGuidResponse/SystemGuid
Run Code Online (Sandbox Code Playgroud)

错误:

Error processing xml. Namespace prefix 'n0' is not defined.

SOAP XML:

<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
    <soap-env:Header></soap-env:Header>
    <soap-env:Body>
        <n0:RequestSystemGuidResponse 
            xmlns:n0="urn:sap-com:document:sap:soap:functions:mc-style">
            <Errors></Errors>
            <SystemGuid>E050831C9CA1D1F1A9FC005056B95649</SystemGuid>
        </n0:RequestSystemGuidResponse>
    </soap-env:Body>
</soap-env:Envelope>
Run Code Online (Sandbox Code Playgroud)

Lar*_*rsH 5

您尚未将名称空间前缀"n0"声明为评估XPath表达式的环境.XPath中使用的命名空间声明需要在使用XPath的环境中声明.

如果您需要有关如何操作的帮助,请告诉我们您如何使用XPath.您是否将"/ soap:Body/n0:RequestSystemGuidResponse/SystemGuid"传递给特定类的特定方法?在什么图书馆?什么语言?您需要告诉它"n0"前缀代表其URI为"urn:sap-com:document:sap:soap:functions:mc-style"的命名空间.

显然你已经声明了命名空间前缀"soap",否则你也会收到关于它的错误.

此外,一旦修复了,您的XPath表达式将需要修改,因为现在它只有在输入XML中的顶级元素时才会起作用.代替

/soap:Body/n0:RequestSystemGuidResponse/SystemGuid
Run Code Online (Sandbox Code Playgroud)

你需要

/*/soap:Body/n0:RequestSystemGuidResponse/SystemGuid
Run Code Online (Sandbox Code Playgroud)

(假设soap为URI为"http://schemas.xmlsoap.org/soap/envelope/"的命名空间声明了前缀).