如何一次访问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.
但是我希望它使用如上所示的单个字符串。有人能告诉我怎么做吗?
Descendants()将跳过任意数量的中间节点,例如,这将跳过root
和Test1
:
doc.Decendants("Result")
还请注意,您也可以将XPath与Linq2Xml一起使用,例如XPathSelectElements
doc.XPathSelectElements("/root/Test1/Result");
您可以使用//
跳过层次结构的中间级别(或者在xpath字符串的开头使用//
跳过根)
"/root//Result"
一个警告- Xml是区分大小写的,所以Result
和result
不是同一个元素。
您引用的字符串("/root//Test1//result"
)是XPath表达式。
您可以使用LINQ到XML类(如XDocument
)使用XPathEvaluate
, XPathSelectElement
和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
程序集(可能已经存在)。
您可以尝试使用XDocument
:
// 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");