Я пытаюсь написать выражение xpath, которое соответствует только первому следующему предку, который содержит данный атрибут, но я не могу найти соответствующий xpath. Упрощенный пример XML:
<root>
<node href="L1_value_1">
<node href="L2_value_1">
<node href="L3_value_1">
<node href="L4_value_1"/>
</node>
</node>
<node/>
<node href="L2_value_2"/>
<node href="L2_value_3"/>
</node>
<node href="L1_value_2"/>
<node href="L1_value_3"/>
</root>
Например, если я нахожусь на узле, содержащем href = "L4_value_1", я хочу вернуть только узел с href = "L2_value_2". К сожалению, я не могу найти правильный xpath. Я пробовал следующее:
<xsl:apply-templates select="ancestor::*/following-sibling::*[@href][1]"/>
- возвращает первое совпадение после родственного брата на каждый уровень предка, т. Е. Узлы, содержащие L2_value_2 и L1_value_2 в примере.
<xsl:apply-templates select="ancestor::*[1]/following-sibling::*[@href][1]"/>
- возвращает первое совпадение после родственного брата на только родительский уровень, т. Е. Ничего в примере.
Как я могу пройти по дереву настолько далеко, насколько это необходимо, и только захватить первый матч?