我正在尝试从以下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>
答案 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
前缀。