轴后的测试表达式为XSLT 2.0 ul

时间:2013-08-05 15:11:50

标签: xml xslt xpath xslt-2.0

使用此代码,'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>

有人可以解释一下吗?

1 个答案:

答案 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'也会匹配其他节点类型,例如属性。