2015-04-02 77 views
0

我想製作一個通用的XmlParsing方法。以Xml爲例:c#XmlDocument SelectNodes沒有返回節點

<body> 
<section> 
    <subsection1> 
     ... 
    </subsection1> 
    <subsection2> 
     ... 
    </subsection2> 
</section> 
<section> 
    <subsection1> 
     ... 
    </subsection1> 
    <subsection2> 
     ... 
    </subsection2> 
</section> 
</body> 

我試圖抓住所有「節」節點而不知道它們是多深或它們的父節點名稱。

到目前爲止,我有(我的XML是字符串格式)

 XmlDocument xml = new XmlDocument(); 
     xml.LoadXml(XMLtoRead); 

     XmlNodeList nodes = xml.DocumentElement.SelectNodes("//section"); 

然而,節點數始終是0。我的印象中「//」前綴recursivly通過該節點的文件搜索命名。

我真正的XML是一個SOAP響應:

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 


<soap:Body> 
    <Response xmlns="http://tempuri.org/"> 
+2

在您的xml文檔中是否存在名稱空間URL? – LocEngineer 2015-04-02 10:32:35

+0

是的,我的xml文檔中的頂層元素中有許多網址。 xmlns =「某個網址」。 – colobusgem 2015-04-02 10:33:35

+0

我的XML是SOAP回覆,查看問題編輯 – colobusgem 2015-04-02 10:40:47

回答

2

在這種情況下,它是不通用的,但具體到你的那種SOAP的答覆。 ;-) 試試這個:

var ns = new XmlNamespaceManager(xml.NameTable); 
ns.AddNamespace("ns", "http://tempuri.org/"); 
XmlNodeList nodes = xml.DocumentElement.SelectNodes("//ns:section", ns); 
+0

哈哈,對我的SOAP回覆很好,是的,我會試試。 – colobusgem 2015-04-02 10:51:53