如何从SOAP消息中获取命名空间的名称?

时间:2010-03-13 13:41:04

标签: xml soap namespaces

我有一条SOAP消息(见下文)。

使用Xpath,如何从此消息中提取命名空间的名称?换句话说,是否有一个Xpath例程将返回文本“validateNewOrder”?

任何建议或帮助都是非常宝贵的。我一直在寻找,但没有找到解决方案。这让我发疯了......

谢谢!

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
   <ns1:validateNewOrder xmlns:ns1="http://sire.rabobank.nl/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
     <sireheader xmlns="http://sire.rabobank.nl/">
       <sender>
         <compid>TEST</compid>
       </sender>
     </sireheader>
     <order xmlns="http://sire.rabobank.nl/">
       <account>123456789</account>
     </order>
   </ns1:validateNewOrder>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

2 个答案:

答案 0 :(得分:1)

local-name(/*[local-name() = 'Envelope']/*[local-name() = 'Body']/*[1])

以命名空间无关的方式返回Body下面的第一个元素的本地名称。

用(c#)

测试
XDocument doc = XDocument.Load(@"XMLFile1.xml");
var xpath = "local-name(/*[local-name() = 'Envelope']/*[local-name() = 'Body']/*[1])";
var res = doc.Root.XPathEvaluate(xpath);

答案 1 :(得分:1)

我有我的解决方案,感谢用户Obelix。

我需要的Xpath查询是

local-name(/*[local-name() = 'Envelope']/*[local-name() = 'Body']/*[1])

它在我使用的测试站点上不起作用(显然,我引用的站点只能处理返回节点集的查询),但在我的Java代码中可以正常工作。

现在我可以出去享受周末了

奥利