【问题标题】:How to access an XML element in a single go?如何一次性访问 XML 元素?
【发布时间】:2014-05-13 06:15:45
【问题描述】:

我有一个如下的 XML 字符串:

<root>
    <Test1>
        <Result time="2">ProperEnding</Result>
    </Test1>
    <Test2></Test2>

我必须对这些元素进行操作。大多数情况下,元素在其父元素中是唯一的。我正在使用 XDocument。我记得有一种方法可以访问这样的元素。

XNode resultTest1 = GetNodes("/root//Test1//result")

但是我忘记了。可以使用 linq 访问相同的内容:

doc.root.Elements.etc.etc.

但我希望它使用如上所示的单个字符串。谁能说说怎么弄?

【问题讨论】:

  • 我正在等待重点。
  • 人们认为他们太聪明了,像这样的问题对他们来说太无聊了,哈哈。你想用这个 xml 中的数据做什么?
  • 我从来没有听说过制造无聊是获得反对票的犯罪行为。有一件事我确信他们只擅长一种语言。我正在尝试修改 xml 的内容。我可以使用其他一些方法来做到这一点。但这会派上用场。
  • stackoverflow 的问题是当人们看到对他们来说微不足道或重复的问题时,他们往往会在我看到的情况下投反对票......

标签: c# xml linq


【解决方案1】:

Descendants() 将跳过任意数量级别的中间节点,例如这将跳过rootTest1

doc.Decendants("Result")

还请注意,您也可以将 XPath 与 Linq2Xml 一起使用,例如XPathSelectElements

doc.XPathSelectElements("/root/Test1/Result");

您可以使用// 跳过层次结构的中间级别(或在xpath 字符串的开头使用// 来跳过根目录)

"/root//Result"

一个警告 - Xml 区分大小写,因此 Resultresult 不是同一个元素。

【讨论】:

  • 感谢简短而有用的解释
【解决方案2】:

您所指的字符串 ("/root//Test1//result") 是一个 XPath 表达式。

您可以使用XPathEvaluateXPathSelectElementXPathSelectElements 扩展方法将它与LINQ to XML 类(如XDocument)一起使用。

您可以在 MSDN 上找到有关这些方法的更多信息:http://msdn.microsoft.com/en-us/library/vstudio/system.xml.xpath.extensions_methods(v=vs.90).aspx

要使它们工作,您需要在文件顶部使用 using System.Xml.XPath 并引用 System.Xml.Linq.dll 程序集(可能已经存在)。

【讨论】:

    【解决方案3】:

    您可以尝试使用XDocument 加载您的xml:

    // loads xml file with root element
    XDocument xml = XDocument.Load("filename.xml");
    

    现在您可以将 LINQ 语句附加到您的 xml 变量,如下所示:

    var retrieveSomeSpecificDataLikeListOfElementsAsAnonymousObjects = xml.Descendants("parentNodeName").Select(node => new { SomeSpecialValueYouWant = node.Element("elementNameUnderParentNode").Value }).ToList();
    

    你可以混合和做任何你想做的事情——上面只是一个例子。

    【讨论】:

      【解决方案4】:

      这是你看的吗?

      XmlDocument xmlDocument = new XmlDocument();
      xmlDocument.LoadXml("YourXML");
      XmlNodeList xmlNodes = xmlDocument.SelectNodes("/root/Test1/result");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-31
        • 1970-01-01
        • 2016-11-20
        • 1970-01-01
        • 2011-01-03
        • 1970-01-01
        相关资源
        最近更新 更多