1

次の XML フラグメントを含むXmlNodeが与えられた場合、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' を 'System.Xml.XmlNodeList' に暗黙的に変換することはできません:

XmlNodeList books = nodeLibrary["book"];

上記のメソッド プロパティのショートカットは、book という名前の子が複数ではなく、1 つあると想定していると思います。

B) XmlNode には GetChildren() メソッドがありません:

XmlNodeList books = nodeLibrary.GetChildren("book");

C) XmlNode のChildNodesプロパティは、ブック ノードだけでなく、すべての子を取得します。

D) SelectNodes() メソッドを使用してみましたが、ルートはより大きなドキュメントであり、以前に SelectNodes を使用してより大きなドキュメントから選択された現在の XmlNode のライブラリ フラグメントではありません。

何か案は?ピート

4

1 に答える 1

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);
        }
    }
}
于 2011-07-07T23:23:10.440 に答える