У меня есть следующий xml:
<?xml version="1.0" encoding="utf-8" ?>
<ROLES>
<ROLE type="A">
<USER name="w" />
<USER name="x" />
<ROLE type="B">
<USER name="x" />
<USER name="y" />
</ROLE>
<ROLE type="C">
<USER name="x" />
<USER name="y" />
<USER name="z" />
</ROLE>
</ROLE>
<ROLE type ="D">
<USER name="w" />
</ROLE>
</ROLES>
и я хочу найти все узлы USER с name="x"
, которые являются непосредственными потомками узлов ROLE с атрибутом "type", равным "C", и их предков с name="x"
(возможно, с использованием оси ancestor-or-self) , В этом случае набор узлов должен
содержать два узла (не три, так как вхождение х под B должно
не в счет).
Какое правильное выражение XPath могло бы это сделать? Почему не работает следующее выражение?
/ROLES//ROLE[@type='C']/USER[@name='x']/ancestor-or-self::USER[@name='x']
(возвращается только один узел, возможно, ось собственной личности, а не предки)
Любая помощь будет наиболее ценной.