Вы можете извлечь внешние элементы w:r
с помощью следующего выражения XPath:
//*[local-name()='r' and not(parent::*[local-name()='r'])]
Для следующего XML (для целей тестирования):
<?xml version='1.0' encoding='utf-8'?>
<root xmlns:w="xxx">
<w:r t="c">
test
</w:r>
<w:r t="d">
<w:r t="h">
test
</w:r>
</w:r>
<w:r t="e">
<a>
<b>
<c>...
<w:r t="i">Something</w:r>
...
</c>
</b>
</a>
</w:r>
</root>
Вывод:
<w:r xmlns:w="xxx" t="c"/>
<w:r xmlns:w="xxx" t="d"/>
<w:r xmlns:w="xxx" t="e"/>
Это означает, что все внешние элементы w:r
выбираются выражением.
Если вы хотите принять во внимание всех родителей, а не только прямых родителей, вы можете использовать ось ancestor::
следующим образом:
//*[local-name()='r' and not(ancestor::*[local-name()='r'])]
Для примера XML результат такой же, но семантика другая.