什么是XSL表达式,它将选择仅以A为祖先的所有B?例如这些(我已经可以通过表达式找到R的位置):
R/A/B
R/A/A/B
R/A/A.../A/B
但不是这个
R/A/X/A/B
答案 0 :(得分:1)
在2.0及更高版本中,您可以执行
.//B except .//*[not(self::A)]//B
但是,由于您要求的是XSLT解决方案而不是纯XPath解决方案,因此选择性递归下降以达到相关的B元素可能会更好:
<xsl:template match="A" mode="aab">
<!-- When we find an A, go on to its children -->
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="*" mode="aab">
<!-- When we find something that isn't an A, go no further -->
</xsl:template>
<xsl:template match="B" mode="aab">
<!-- This is one of the B elements we are interested in -->
</xsl:template>
答案 1 :(得分:0)
使用以下匹配表达式:
//B[count(ancestor::A) = count(ancestor::*[not(self::R)])]
使用该表达式的XSL模板可能是
<xsl:template match="B[count(ancestor::A) = count(ancestor::*[not(self::R)])]">
CONDITION FULFILLED!
</xsl:template>