XPATH / XSLT-仅匹配具有给定属性的后一个祖先

时间:2018-09-06 15:44:39

标签: xslt xpath

我正在尝试编写一个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]"/>

-仅在父级上返回同级后的第一个匹配项,即示例中为空。

我怎样才能尽可能地遍历树并仅捕获

1 个答案:

答案 0 :(得分:4)

对于您的第一个表达式,您需要在此处编写它。

 <xsl:apply-templates select="(ancestor::*/following-sibling::*[@href])[1]"/>

但是也许您最好使用following轴而不是following-sibling,然后您可以执行此操作...

<xsl:apply-templates select="following::*[@href][1]"/>