使用此代码,'ul'元素不会触发“what”模板。
<xsl:when test="self::p|table|box|example|fig|figure|ol|para|ul" >
<xsl:call-template name="whatever" />
</xsl:when>
然而,将它分开,使其工作得很好:
<xsl:when test="self::p|table|box|example|fig|figure|ol|para or self::ul" >
<xsl:call-template name="whatever" />
</xsl:when>
有人可以解释一下吗?
答案 0 :(得分:1)
self::p|table|box|example|fig|figure|ol|para|ul
与
相同self::p | child::table | child::box | ....etc etc....
您需要在每个节点测试中单独指定轴,它不是|
上的“分布式”。
在XPath 2.0中进行相同测试的另一种可能更简洁的方法可能是
name() = ('p', 'table', 'box', 'example', .....)
虽然这并不完全相同,因为self::example
只匹配名为example的元素节点,而name() = 'example'
也会匹配其他节点类型,例如属性。