2013-11-21 3 views
0

У меня есть такой XMLСтранное поведение XPathSelectElements и пространств имен

<soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/."> 
    <soap-env:body> 
    <SomeElement xmlns='http://www.MySite.com/SOAP' /> 
    </soap-env:body> 
</soap-env:envelope> 

И я пытаюсь получить узел «SomeElement» с XPath, как этот

var xDocument = XDocument.Parse(strXml); 
var xmlNamespace = new XmlNamespaceManager(xDocument.CreateReader().NameTable); 
xmlNamespace.AddNamespace("soap-env", "http://schemas.xmlsoap.org/soap/envelope/."); 
xmlNamespace.AddNamespace("", "http://www.MySite.com/SOAP"); 
var xmlBody = xDocument.XPathSelectElements("soap-env:envelope/soap-env:body/SomeElement", xmlNamespace); 

и получение нуль вернулся в xmlBody, но если я удалю xmlns='http://www.MySite.com/SOAP' namespace все работает нормально.

ответ

1

Если префикс пространства имен по умолчанию, я думаю, что он должен работать, так измениться:

xmlNamespace.AddNamespace("", "http://www.MySite.com/SOAP"); 
var xmlBody = xDocument.XPathSelectElements("soap-env:envelope/soap-env:body/SomeElement", xmlNamespace); 

To:

xmlNamespace.AddNamespace("pref", "http://www.MySite.com/SOAP"); 
var xmlBody = xDocument.XPathSelectElements("soap-env:envelope/soap-env:body/pref:SomeElement", xmlNamespace); 
+0

спасибо за решение! – Powerslave

Смежные вопросы