【问题标题】:XML C# Fast Way To Find NodeXML C# 快速查找节点的方法
【发布时间】:2009-03-10 14:59:29
【问题描述】:

您好,我是 XML 和 .NET 的新手。我想知道如何解析以下文件。我希望能够根据我将提供的 ID 获取 XmlNode。示例:

<Data>
<Question id="1">
<Answer>ddd</Answer>
</Question>
</Data>

我想以某种方式做到这一点:

XmlDocument myDoc = new XmlDocument();
XmlElement myElem = myDoc.GetElementById("1");
Response.Write("Answer: "+myElem.ChildNodes[0].InnerXML);

这应该给我的输出:“答案:ddd”。

非常感谢您的帮助。

我也不想使用 LINQ,因为我想先掌握 .NET 的 XML 组件。

【问题讨论】:

    标签: .net xml


    【解决方案1】:

    目不转睛,无需编译:

    XmlNode node = myDoc.SelectSingleNode("Data/Question[@id='1']/Answer"); Response.Write("答案:" + node.InnerText);

    当然,如果您想要一些变量,将 1 更改为参数将是理想的。

    【讨论】:

    • 是的,这编译得很好,我也在尝试同样的事情。 var node = doc.SelectSingleNode("/Data/Question[@id='1']/Answer"); Response.Write("答案:" + node.InnerText);
    【解决方案2】:

    伪代码:myDoc.selectSingleNode("//Question[@id=whatever]") (简直是我的头)

    【讨论】:

      【解决方案3】:

      在 LINQ 之前,我会使用 SelectSingleNode 和 XPath 查询。在上面的示例中,XPath 类似于"//Question[@id=1]/Answer"。现在,我将使用 LINQ,因为至少据我所知,您不必使用 XmlDocument 对象来节省开销。通过使用 XElement 并使用 LINQ to XML 扩展方法来查询您想要的节点,您可以用一两行代码完成整个事情,并且它的性能会很好或更好。

      这是一个使用 xml sn-p 的 LINQ 中的一个示例,它甚至不需要实例化一个对象来使用 xml:

      string xml = "<Data><Question id=\"1\"><Answer>ddd</Answer></Question></Data>";
      string answer = XElement.Parse(xml).Descendants("Question").
          Where(node => node.Attribute("id").Value == "1").
          Descendants("Answer").ElementAt(0).Value;
      

      【讨论】:

        【解决方案4】:

        .Net 的 XML 组件是一团糟。请不要受制于它,只需使用 LINQ to XML。综上所述,它更易于使用且运行速度更快。

        【讨论】:

        • @OliverS:然后将该限制添加到您的问题中。
        • 我认为他的问题很合适,因为他指定了他想要的内容,无需提出超出问题范围的建议。
        • 不管有没有 LINQ 都是一样的……只有 LINQ 模型更容易理解,即强类型和更有意义的方法名称。说真的,升级到 3.5 并不难。我已经升级了一些项目,根本没有任何代码或配置更改!
        • @Pat:由于 OliverS 最初声明不使用 LINQ 的原因,我发布了此回复。恕我直言,仅仅因为你想掌握一种相当死的技术而学习一种垃圾的做事方式并不是什么大理由。但是,如果他有真正的限制,那么我的回答毫无价值。
        • 也就是说,由于客户端的限制,我参与的项目不能使用 3.5 框架。所以我理解它的这一方面。
        【解决方案5】:

        我认为那些指向 Linq 而远离 XML 组件的人是正确的。您可能想学习或使用 XPath 以实现非 .Net 兼容性,如果您愿意,Linq 允许您这样做。使用 XML 组件并不有趣。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-07
          • 2012-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多