2012-04-05 132 views
-2

數組我有System.Xml.XmlNode數據類似這樣的數組:搜索XML節點

[0] = <Node1 xmlns="---">N1Data</Node1> 

[1] = <Node2 xmlns="---">N2Data</Node2> 

[2] = <Node3 xmlns="---">N3Data</Node3> 

使用LINQ,我怎麼會選擇節點2內的數據?對於XDocument而言,這看起來微不足道,但由於數據格式是由外部資源提供的,因此我的數據格式是不可協商的。

在此先感謝。

+0

你有什麼樣的形式在目前的陣列?已經解析,或者作爲文本?在文件中,還是不是? – 2012-04-05 16:28:04

+0

@JonSkeet該數組由XML節點和解析的數據組成,每個OuterXml的外觀類似於我提供的3個示例。據我所知,這些不構成文件。 – Jonathan 2012-04-05 16:31:42

+0

-1這個問題不夠具體,以制定正確的答案。祝你好運。 – 2012-04-05 17:14:05

回答

3

像這樣,也許?

XmlNode[] nodes = ...; 
string value = nodes.Single(n => n.LocalName == "Node2").InnerXml; 
// or .InnerText, depending on what you need. 
+0

謝謝。這正是我正在尋找的,雖然我可以用XDocument達到同樣的效果,但是將所有XML解析爲新對象似乎有點低效。 – Jonathan 2012-04-05 21:25:24

1

新建答案:徹底改變不使用XDocument可言,每個作者的要求:

string[] elementArray = new[] 
{ 
    "<Node1 xmlns=\"foo\">Bar</Node1>", 
    "<Node2 xmlns=\"foo\">Bar</Node2>", 
    "<Node3 xmlns=\"foo\">Bar</Node3>" 
}; 

var search = "Node2"; 
string result = elementArray 
    .Where(x => x.Split(' ').First().Substring(1) == search) 
    .Select(x => 
    { 
     int closeBrace = x.IndexOf(">"); 
     int openBrace = x.IndexOf("<", closeBrace); 
     return x.Substring(closeBrace + 1, openBrace - closeBrace - 1); 
    }) 
    .Single();