如何一次访问XML元素?

时间:2014-05-13 06:15:46

标签: c# xml linq

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

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

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

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

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

doc.root.Elements.etc.etc.

但是我希望它使用如上所示的单个字符串。有人能说怎么做吗?

4 个答案:

答案 0 :(得分:1)

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

doc.Decendants("Result")

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

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

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

"/root//Result"

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

答案 1 :(得分:1)

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

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

您可以在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程序集(可能已经存在)。

答案 2 :(得分:1)

您可以尝试使用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();

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

答案 3 :(得分:0)

这是你看的吗?

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