Предположим, я загружаю документ 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?
(надеюсь, без преобразования в строку и повторного разбора.)