Подтвердить что ты не робот

Как я могу запросить XDocument с "path"?

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

4b9b3361

Ответ 1

Нечто подобное может работать:

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;

Ответ 2

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

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

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

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

Ответ 3

Несмотря на то, что это несколько более старая статья, следует отметить, что 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

Ответ 4

Мне нужно было сделать что-то подобное. Этот repo имеет несколько модульных тестов, демонстрирующих запрос XDocument с помощью XPathEvaluate()