Я хотел бы запросить объект XDocument
для заданного пути (например, "/path/to/element/I/want" ), но я не знаю, как это сделать.
Как я могу запросить XDocument с "path"?
Ответ 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.
Ответ 4
Мне нужно было сделать что-то подобное. Этот repo имеет несколько модульных тестов, демонстрирующих запрос XDocument с помощью XPathEvaluate()