2012-05-19 58 views
0

我已经得到以下soap消息,并且想知道如何编写xpath查询来提取GetNewGUIDResult?XPATH:从SOAP消息中提取数据

<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的

回答

3

你的XPath表达式应该像:

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

您将需要声明命名空间前缀。我不知道你用的是什么API,但你需要声明下面的空间前缀,使你上面的表达式工作:

肥皂 - >http://schemas.xmlsoap.org/soap/envelope/ SRV - >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']

+0

感谢。但是这个svr是什么?我使用Microsoft的xpath和xml类(使用System.XML.XPath)。 – VVV

+0

我无法修改包含SOAP消息的xml文件。 – VVV

+0

您不必更改SOAP消息。您可以在您的XPath中任意指定名称空间前缀(将其命名为与XML文档中相同的名称不是“解决方案”)。您需要使用XPath API将前缀绑定到名称空间URI。 –