2011-06-08 29 views
1

我有一个问题,我如何搜索xml文件并获取与我提供的文本相匹配的节点。例如:C#:xml标记内的搜索值

<bookstore> 
<book> 
    <title>The Autobiography of Benjamin Franklin</title> 
    <author> 
    <first-name>Benjamin</first-name> 
    <last-name>Franklin</last-name> 
    </author> 
    <price>8.99</price> 
    </book> 
</bookstore> 

我想搜索具有文本Benjamin并让程序存储XmlNode的节点。我怎样才能做到这一点?任何人都可以提供示例代码为这个前?

感谢

回答

7

看看这个: http://www.4guysfromrolla.com/articles/062310-1.aspx

LINQ使在XML很容易搜索。

下面是一个例子:

 XDocument doc = XDocument.Load("C:\\yourxml.xml"); 
     XElement element = 
      doc.Element("bookstore") 
       .Descendants("book") 
       .Where(a => a.Element("author") 
        .Element("first-name").Value.Equals("Benjamin")) 
        .First(); 
+0

+1你。 @LDAdams – 2011-06-08 16:28:33

+0

我不能得到这个工作。问题是,在后代(“书”)部分,没有选择一个where命令... – hWorld 2011-06-08 18:45:00

1

试试这个:

while (reader.Read()) 
    { 
    switch (reader.NodeType) 
    { 
     case XmlNodeType.Element: 
     break; 
     case XmlNodeType.Text:    
     if (reader.Value.Equals(wrd)) // string wrd equals Benjamin 
      { 

      } 
      break; 
    } 
0

LDAdams暗示的LINQ to XML,这是一个非常好的选择。您还可以在.NET中使用XML DOM对象,并使用XPath查询来查找有问题的节点。要么是一个可以接受的选择。 LINQ对XML的好处是它使用扩展方法而不是XPath,这使得非XML精明的开发人员更容易获得答案。此外,这些知识至少部分适用于其他LINQ衍生产品。

0

的XPath

XmlDocument dom = new XmlDocument (); 

dom.LoadXml (xml); 


var nodes = dom.SelectNodes ("//*[text()='Benjamin']");