C#如何提取完整的xml节点集
Everyday Italian Giada De Laurentiis 2005 30.00 Harry Potter J K. Rowling 2005 29.99 XQuery Kick Start James McGovern Per Bothner Kurt Cagle James Linn Vaidyanathan Nagarajan 2003 49.99 Learning XML Erik T. Ray 2003 39.95
他们以任何方式使用XPath来选择完整的第一个节点集,例如来自
to ,
这样,可以存储那个xml块供以后使用。
鲍勃。
假设这个XML存储在名为doc
的XmlDocument
。
XmlElement docRoot = doc.DocumentElement; XmlNode cookingNode = docRoot.SelectSingleNode("./book[@category='COOKING']");
我测试了这个并添加了这一行来validation:
Console.WriteLine(cookingNode.OuterXml);
这是输出:
Everyday Italian Giada De Laurentiis 2005 30.00
此查询将选择该节点。 您是要尝试获取一组节点还是只获取一个节点? 如果您只想要节点的子集,则可能必须自己放回书店节点。
/bookstore/book[@category='COOKING']
作为XmlDocument ……
var x = new XmlDocument(); x.Load("XmlFile1.xml"); var ns = x.SelectSingleNode("/bookstore/book[@category='COOKING']"); var res = ns.OuterXml;
作为XDocument ……
var x = XDocument.Load("XmlFile1.xml"); var root = new XElement("bookstore", from book in x.Element("bookstore").Elements("book") where book.Attribute("category").Value == "COOKING" select book );
如果您只想要书籍节点,则可以执行此操作而不是上面的根版本
var book = x.Element("bookstore") .Elements("book") .Where(n => n.Attribute("category").Value == "COOKING") .First();
假设我只想提取xml文件所在的数据,如下所示。
Everyday Italian Giada De Laurentiis 2005 30.00
列表视图的最终结果应如下所示
lang auth en up
我编码如下..
XmlNodeList elemList = doc.GetElementsByTagName("book"); for (int j = 0; j < elemList.Count; j++) { if (elemList[j].Attributes["category"].Value == "COOKING") { XmlNodeList elemList1 = doc.GetElementsByTagName("author"); for (int i = 0; i < elemList1.Count; i++) { string attrVal = elemList1[i].Attributes["lang"].Value; string attrVal1 = elemList1[i].Attributes["auth"].Value; ListViewItem lvi = new ListViewItem(); lvi.SubItems.Add(attrVal1); lvi.SubItems.Add(attrVal1); } listView1.Items.Add(lvi); } } }
加入马修的回应:
XmlDocument xDoc = new XmlDocument(); // (Put code to populate xDoc here) XmlNodeList xNode = xDoc.SelectNodes(@"/bookstore/book[@category='COOKING']");
xNode现在等于COOKING类型的书。