Как я могу получить имя пространства имен из сообщения SOAP? - PullRequest
2 голосов
/ 13 марта 2010

У меня есть сообщение 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 ]

1 голос
/ 13 марта 2010

У меня есть решение, благодаря пользователю Obelix.

Мне нужен был запрос Xpath

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

Он не работает на тестовом сайте, который я использовал (очевидно, сайт, который я цитировал, может обрабатывать только запросы, возвращающие набор узлов), но работает в моем коде Java.

Теперь я могу выйти и насладиться выходными

Олли

1 голос
/ 13 марта 2010
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);
...