如果XmlNode包含以下XML片段,如何使用书籍节点填充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的SINGLE子项,而不是多个!
B)XmlNode没有GetChildren()方法:
XmlNodeList books = nodeLibrary.GetChildren(“book”);
C)XmlNode的ChildNodes属性获取所有子节点,而不仅仅是书籍节点。
D)我尝试使用SelectNodes()方法,但是root是较大的文档,而不是之前使用SelectNodes从较大文档中选择的当前XmlNode中的库片段。
有什么想法吗? 皮特
答案 0 :(得分: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);
}
}
}