【问题标题】:Searching an array of XML Nodes搜索 XML 节点数组
【发布时间】:2012-04-05 16:24:24
【问题描述】:

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

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

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

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

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

提前致谢。

【问题讨论】:

  • 你现在有什么形式的数组?已经解析,还是作为文本?是否在文档中?
  • @JonSkeet 该数组由带有解析数据的 XML 节点组成,每个节点的 OuterXml 看起来与我提供的 3 个示例相似。据我所知,这些不构成文件。
  • -1 这个问题不够具体,无法给出正确的答案。祝你好运。
  • @ChuckSavage 由于他不断变化的要求,我按照您的建议创建了一个新答案。

标签: c# xml linq xmldocument


【解决方案1】:

也许是这样?

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

【讨论】:

  • 谢谢。这正是我正在寻找的,虽然我可以使用 XDocument 实现相同的目标,但将所有 XML 解析为一个新对象似乎有点低效。
【解决方案2】:

新答案:根据作者的要求,完全更改为根本不使用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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多