XSLT 2.0 / XPATH-测试时选择节点

时间:2018-10-19 10:35:47

标签: xslt xpath xslt-2.0

在XSLT 2.0下的XPATH中,我不清楚为什么Object无法正常工作。

当我为元素xsl:choose/xsl:when @test运行此模板测试时,该测试不会返回结果:

tei:del[@rend='expunctus']

当我仅使用属性<xsl:template match="tei:del[@rend='expunctus'] | tei:gap | tei:sic | tei:supplied[@reason='added'] | tei:surplus[@reason='repeated' or @reason='surplus'] | tei:unclear"> <xsl:choose> <xsl:when test="tei:del[@rend='expunctus']"> [<xsl:text>EXPUNCTUS</xsl:text>] </xsl:when> </xsl:template> 作为测试模板时,测试会返回结果:

@rend='expunctus'

这是因为已经选择了当前节点吗?

我更愿意针对元素而不是属性进行测试,以消除可能的歧义。

谢谢。

1 个答案:

答案 0 :(得分:1)

是的,这是因为选择了当前节点。

您的模板与tei:del[@rend='expunctus']相匹配(除其他外),因此当您进行<xsl:when test="tei:del[@rend='expunctus']">时,它与您已匹配的节点有关,因此它正在寻找另一个tei:del作为子节点当前节点的节点。

您可能需要做的是...

<xsl:when test="self::tei:del[@rend='expunctus']">

或者,考虑为每个可能的节点使用单独的模板,并将所有共享代码放在命名模板中。