使用Xpath从SOAP Message获取价值

时间:2011-03-22 11:50:03

标签: soap xpath

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

XPath我正在使用:

/soap:Body/n0:RequestSystemGuidResponse/SystemGuid

错误:

  

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>

1 个答案:

答案 0 :(得分: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

你需要

/*/soap:Body/n0:RequestSystemGuidResponse/SystemGuid

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