Как я могу выполнить выбор XPath для XElement, который был извлечен из большего XDocument? - PullRequest
0 голосов
/ 19 марта 2020

Предположим, я загружаю документ XML в память и извлекаю один из элементов внутри. Например:

XDocument doc = XDocument.Parse("<A><B><C/></B><D/></A>");
XElement b = doc.Descendants().Where(x => x.Name.LocalName == "B").Single();
Console.WriteLine(b);

В результате возвращается <B><C/></B>, поэтому у меня есть XElement, представляющий небольшую часть исходного документа XML.

Теперь я хотел бы выполнить выбор XPath только для той части, которую я извлек. Однако эксперименты с XPathSelectElement / s показывают, что все мои выражения XPath работают с исходным документом XML.

b.XPathSelectElement("/A") возвращает элемент root исходного документа.
b.XPathSelectElement("/B") возвращает ноль .
b.XPathSelectElement("/") выдает исключение: «Выражение XPath оценивается как неожиданный тип System. Xml .Linq.XDocument.».

Как выполнить выборки XPath только для содержимого XElement?
(надеюсь, без преобразования в строку и повторного разбора.)

1 Ответ

1 голос
/ 02 апреля 2020

Если вы не сделаете копию или клон структуры XML, вы можете просто использовать путь относительно узла контекста, например

b.XPathSelectSelectElement("C")

. Это должно вернуть элемент <C />.
Ось / всегда выбирает узел документа XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...