2013-11-21 39 views
0

我有這樣的XML奇怪的行爲

<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'命名空間一切工作正常。

回答

1

如果前綴的默認命名空間,我覺得它應該工作,所以更改:

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

要:

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

感謝解決方案! – Powerslave