Предположим, у меня есть этот документ.Как выбрать наиболее мелкие совпадающие элементы с XPath?
<a:Root>
<a:A>
<title><a:B/></title>
<a:C>
<item><a:D/></item>
</a:C>
</a:A>
</a:Root>
И у меня есть XmlNode набор для <a:A>
элемента.
Если я говорю
A.SelectNodes("//a:*", namespaceManager)
я B
, C
и D
. Но я не хочу D
, потому что он вложен в другой элемент «a:».
Если я говорю
A.SelectNodes("//a:*[not(ancestor::a:*)]", namespaceManager)
конечно, я ничего не получаю, так как А и его предок находятся в «в» пространстве имен.
Как я могу выбрать только B
и C
, то есть неглубокие дети, соответствующие пространству имен?
Спасибо.
Обратите внимание, что это XPath 1.0 (.NET 2), поэтому я не могу использовать префиксы in-scope (которые, по-видимому, помогли бы).
Кроме того, это не вопрос об пространствах имен. Это затруднительно с другими критериями соответствия.
Хороший вопрос (+1). См. Мой ответ для единственного чистого решения XPath 1.0. :) –