我有一个如下所示的XML字符串:
<root>
<Test1>
<Result time="2">ProperEnding</Result>
</Test1>
<Test2></Test2>
我必须对这些元素进行操作。大多数情况下,元素在其父元素中是唯一的。我正在使用XDocument。我记得有一种方法可以访问这样的元素。
XNode resultTest1 = GetNodes("/root//Test1//result")
但我忘记了。可以使用linq访问相同的内容:
doc.root.Elements.etc.etc.
但是我希望它使用如上所示的单个字符串。有人能说怎么做吗?
答案 0 :(得分:1)
Descendants()将跳过任意数量级别的中间节点,例如这将跳过root
和Test1
:
doc.Decendants("Result")
另请注意,您也可以将XPath与Linq2Xml一起使用,例如: XPathSelectElements
doc.XPathSelectElements("/root/Test1/Result");
您可以使用//
跳过层次结构的中间级别(或在xpath字符串的开头使用//
跳过根)
"/root//Result"
一个警告 - Xml区分大小写,因此Result
和result
不是同一个元素。
答案 1 :(得分:1)
您所指的字符串("/root//Test1//result"
)是XPath表达式。
您可以使用XDocument
,XPathEvaluate
和XPathSelectElement
扩展方法将它与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");