2012-01-17 46 views
1

下面是我的xml文檔的結構。我只想先取每個節點的值然後將其與給定值進行比較。但是我不知道如何在c#中使用xml selectnodes來定位每個節點的。 Google搜索沒有顯示任何工作解決方案。選擇具有名稱屬性名稱的元素在特殊的xml結構中

<nodes>  
<node name = "node1">  
    <attribute name="a">This is node1 a</attribute> 
    <attribute name="b">This is node1 b</attribute> 
</node> 
<node name = "node2">  
    <attribute name="a">This is node2 a</attribute> 
    <attribute name="b">This is node2 b</attribute> 
</node> 
... 
</nodes>  

回答

1

假設你提問中的XML標記代表你的整個文檔,你可以做:

XmlNodeList attrElements 
    = yourDocument.SelectNodes("/nodes/node/attribute[@name='a']"); 
3

使用LINQ到XML:

XElement xml = XElement.Load("test.xml"); 
var myNodes = xml.Descendants("attribute") 
       .Where(x => x.Attribute("name").Value == "a"); 

要檢索,而不是節點的值:

var myValues = xml.Descendants("attribute") 
        .Where(x => x.Attribute("name").Value == "a") 
        .Select(x => x.Value); 
+0

consolewriteline(myvalues)工程奇怪:我:System.Linq.Enumerable + WhereSelectEnumerableIterator' 2 [System.Xml.Linq.XElement, System.String] – user1154138

+0

你必須打印出不是枚舉的項目:'foreach(var item in myValues)Console.WriteLine(item);' – BrokenGlass

1

你可以使用Linq到XML,如下所示:

string xml = "<nodes>..."; 

var results = from node in XDocument.Parse(xml).Descendants() 
      where node.Name == "attribute" 
      select node.Value; 

然後,您可以根據需要遍歷結果。

也有一個不錯的Linq to XML overview here

1

我喜歡使用System.Xml.XmlDocument類來進行我的xml解析。

XmlDocument doc = new XmlDocument(); 
doc.load("myfilename.xml"); 
XmlNode node = doc.SelectSingleNode("\\attribute[name='a']") 

你應該看看一些的XPath參考,以確保你得到的XPath字符串右http://msdn.microsoft.com/en-us/library/ms256086.aspx

相關問題