如何使用"路径"查询XDocument?

bin*_*eol 23 c# xml linq xpath linq-to-xml

我想查询XDocument给定路径的对象,(例如"/ path/to/element/I/want")但我不知道如何继续.

svi*_*ick 54

您可以使用方法System.Xml.XPath.Extensions来执行此操作.

例如,如果要选择单个元素,则可以使用XPathSelectElement():

var element = doc.XPathSelectElement("/path/to/element/I/want");
Run Code Online (Sandbox Code Playgroud)

查询不必像您描述的那样是简单路径,而是使用XPath语言.

  • @lionheart这不是我的建议吗?并且`System.Xml.XPath`命名空间在.Net 4.5中肯定不是新的. (7认同)
  • 在4.5中,使用System.Xml.XPath. (6认同)

Sey*_*our 5

虽然这是一个稍微较旧的帖子,但应该注意的是,它LINQ-to-XML可以用作System.XML.XPath基于路径内的路径查找元素的替代方法.XDocument

例:

var results = x.Elements("path").Elements("to").Elements("element").Elements("I").Elements("want").FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

注意:可能需要更改LINQ to XML命令以适应XML的实际结构和/或基数.

https://msdn.microsoft.com/en-us/library/bb675156.aspx


Dav*_*Dev -2

与此类似的东西可能会起作用:

var path = "/path/to/element/I/want";
var route = path.Split(new []{'/'}, StringSplitOptions.RemoveEmptyEntries);

XElement result = null;
foreach (var node in route)
{
    if (result == null)
    {
        result = _xmlDocument.Element(node);    
    }
    else
    {
        result = result.Element(node);
    }
}

return result;
Run Code Online (Sandbox Code Playgroud)