2011-06-08 70 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']");