2011-07-07 79 views
1

給定一個包含以下XML片段的XmlNode,如何使用書籍節點填充XmlNodeList?如何將XmlNodeList與同名節點的所有子節點一起填充?

的XMLNode nodeLibrary包含:

<library> 
    <book> 
     <title>Three Little Pigs</title> 
    </book> 
    <book> 
     <title>Batman</title> 
    </book> 
    <address>123 Main St.</address> 
    <phone>111-111-1111</phone> 
</library> 

這應該是很容易的,但我無法弄清楚:

A)無法隱式轉換類型 'System.Xml.XmlElement' 到「系統。 Xml.XmlNodeList':

XmlNodeList books = nodeLibrary [「book」];

我想上面的方法屬性快捷方式假定有一個名爲book的單個子,不是多個!

B)XmlNode的不具有的GetChildren()方法:

XmlNodeList中書籍= nodeLibrary.GetChildren( 「書」);

C)XmlNode的ChildNodes屬性獲取所有孩子,而不僅僅是書籍節點。 D)我嘗試使用SelectNodes()方法,但根是較大的文檔,而不是當前XmlNode中從較早的文檔中使用SelectNodes選擇的庫片段。

任何想法? Pete

+0

它是否必須是'XmlNodeList'? –

回答

0

您可以使用SelectNodes,並在XPath查詢中傳遞'。'。從該節點開始搜索:

public class StackOverflow_6618097 
{ 
    const string XML = @"<buildings> 
<library> 
    <book> 
    <title>Three Little Pigs</title> 
    </book> 
    <book> 
    <title>Batman</title> 
    </book> 
    <address>123 Main St.</address> 
    <phone>111-111-1111</phone> 
    <hidden> 
    <book> 
    <title>The Hidden Treasure</title> 
    </book> 
    </hidden> 
</library> 
<bookstore> 
    <book> 
    <title>Cat in the Hat</title> 
    </book> 
</bookstore> 
</buildings>"; 

    public static void Test() 
    { 
     XmlDocument doc = new XmlDocument(); 
     doc.LoadXml(XML); 
     XmlNode libraryNode = doc.SelectSingleNode("//library"); 
     XmlNodeList libraryBooks = libraryNode.SelectNodes(".//book"); 
     Console.WriteLine("Books: {0}", libraryBooks.Count); 
     foreach (XmlNode node in libraryBooks) 
     { 
      Console.WriteLine(node.OuterXml); 
     } 
    } 
} 
+0

可能最好使用'。/ book'來過濾直接的孩子,而不是所有的後代。 –

+0

對,我添加了「隱藏寶藏」的例子來說明代碼將會返回所有的後代;感謝您添加這些額外的信息。 – carlosfigueira

相關問題