Как я могу запросить XDocument с помощью «пути»?

Я хотел бы запроситьXDocument объект для заданного пути (например, "/ path / to / element / I / want"), но я не знаю, как поступить.

 Jelgab08 июл. 2016 г., 22:31
Вы можете увидеть пример выбора разных путей, с / без определений пространства имен и т. Д. Здесь:stackoverflow.com/a/38272604/5838538.
 Fyodor Soikin27 июн. 2012 г., 12:53
возможный дубликатhow to use XPath with XDocument?

Ответы на вопрос(4)

Сделки рЕПО имеет несколько модульных тестов, демонстрирующих запросы XDocument с помощью XPathEvaluate ()

LINQ-to-XML может быть использован в качестве альтернативыSystem.XML.XPath чтобы найти элементы на основе пути в пределахXDocument

Пример:

var results = x.Elements("path").Elements("to").Elements("element").Elements("I").Elements("want").FirstOrDefault();

Примечание: может потребоваться изменить команду LINQ to XML, чтобы она соответствовала фактической структуре и / или количеству элементов XML.

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

Вы можете использовать методы изSystem.Xml.XPath.Extensions сделать это.

Например, если вы хотите выбрать один элемент, вы должны использоватьXPathSelectElement():

var element = doc.XPathSelectElement("/path/to/element/I/want");

Запросы не должны быть простыми путями, такими как описанные вами, они используютXPath язык.

 09 июн. 2013 г., 07:06
В версии 4.5 используйте System.Xml.XPath.
 09 июн. 2013 г., 12:39
@ lionheart Разве это не то, что я предложил? ИSystem.Xml.XPath Пространство имен, конечно, не является новым в .Net 4.5.
Решение Вопроса

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;
 27 июн. 2012 г., 12:55
RemoveEmptyEntries не очень хорошая идея,// имеет конкретное значение в XPath и позволяет искать всех потомков.

Ваш ответ на вопрос