我有一条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>
答案 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代码中可以正常工作。
现在我可以出去享受周末了
奥利