搜索XML节点数组

时间:2012-04-05 16:24:24

标签: c# xml linq xmldocument

我有一个System.Xml.XmlNode数组,其数据类似于:

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

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

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

使用LINQ,我如何选择Node2的内部数据?这对于XDocument来说似乎微不足道,但我的数据格式是不可协商的,因为它是由外部资源提供的。

提前致谢。

2 个答案:

答案 0 :(得分:3)

像这样,也许?

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

答案 1 :(得分: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();