我正在尝试编写一个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]"/>
-仅在父级上返回同级后的第一个匹配项,即示例中为空。
我怎样才能尽可能地遍历树并仅捕获 ?
答案 0 :(得分:4)
对于您的第一个表达式,您需要在此处编写它。
<xsl:apply-templates select="(ancestor::*/following-sibling::*[@href])[1]"/>
但是也许您最好使用following
轴而不是following-sibling
,然后您可以执行此操作...
<xsl:apply-templates select="following::*[@href][1]"/>