2012-07-10 199 views

回答

6

个人而言,我会使用LINQ到XML,如果你所能。你的问题是目前非常模糊,但是,例如,你可以写:

XDocument doc = XDocument.Load("test.xml"); 
var matches = doc.Descendants("Person") 
       .Where(x => (string) x.Attribute("Name") == "Jon") 
       .Where(x => x.Elements("Child").Count() >= 2); 

虽然你可以使用XPath的,我通常不喜欢 - 它在另一个嵌入一个语言的所有正常的问题,而使用LINQ to XML,你可以在整个过程中使用C#,所以你没有新的语法学习 - 只是LINQ to XML库中的相关方法。

LINQ to XML也使命名空间处理变得简单,而且您不必担心转义值等问题,因为您的查询全部是代码而不是字符串。

通过 XmlDocument.SelectNodes的SelectSingleNode这样
1

使用XPath

XmlDocument doc = new XmlDocument(); 
doc.Load("bookstore.xml"); 
XmlNode root = doc.DocumentElement; 

// Add the namespace. 
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); 
nsmgr.AddNamespace("bk", "urn:newbooks-schema"); 

// Select and display the first node in which the author's 
// last name is Kingsolver. 
XmlNode node = root.SelectSingleNode(
"descendant::bk:book[bk:author/bk:last-name='Kingsolver']", nsmgr); 
Console.WriteLine(node.InnerXml);