XPATH:从Soap Message中提取数据

时间:2012-05-19 09:02:45

标签: xml xpath

我有以下soap消息,想知道如何编写xpath查询来提取GetNewGUIDResult?

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<ActivityId CorrelationId="06996737-224f-4004-9dad-042222b161fc" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">b89cdee8-18b4-4ea0-a5a1-7b10ace1b23e</ActivityId>
</s:Header>
<s:Body>
<GetNewGUIDResponse xmlns="http://bank.co.com/Service/2011_01/Service">
<GetNewGUIDResult>125959</GetNewGUIDResult>
</GetNewGUIDResponse>
</s:Body>
</s:Envelope>

我尝试了一些xpath命令,但它们提供了异常。另外我不确定xmlnamespacemanager的用法。

由于

Varun的

1 个答案:

答案 0 :(得分:3)

您的XPath表达式应该像:

/soap:Envelope/soap:Body/srv:GetNewGUIDResponse/srv:GetNewGUIDResult/text()

您需要声明名称空间前缀。我不知道您正在使用什么API,但是您需要声明以下名称空间前缀以使上述表达式适合您:

肥皂 - &gt; http://schemas.xmlsoap.org/soap/envelope/ srv - &gt; http://bank.co.com/Service/2011_01/Service

如果您不想声明名称空间并使用XPath 2.0处理器,您还可以执行以下操作(但不建议这样做!)

/s:Envelope/s:Body/*[namespace-uri()='http://bank.co.com/Service/2011_01/Service' and local-name()='GetNewGUIDResponse']/*[namespace-uri()='http://bank.co.com/Service/2011_01/Service' and local-name()='GetNewGUIDResult']