如何一次访问XML元素

本文关键字:元素 XML 访问 何一次 | 更新日期: 2023-09-27 18:03:15

我有一个像下面这样的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元素

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

doc.Decendants("Result")

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

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

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

"/root//Result"

一个警告- Xml是区分大小写的,所以Resultresult不是同一个元素。

您引用的字符串("/root//Test1//result")是XPath表达式。

您可以使用LINQ到XML类(如XDocument)使用XPathEvaluate, XPathSelectElementXPathSelectElements扩展方法。

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

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

您可以尝试使用XDocument:

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

现在你可以像这样给你的xml变量追加LINQ语句:

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

你可以混合和做任何你想要的-以上只是一个例子。

你在看这个吗?

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml("YourXML");
XmlNodeList xmlNodes = xmlDocument.SelectNodes("/root/Test1/result");
相关文章: