第二个XSL模板禁用第一个

时间:2017-01-27 09:10:09

标签: html xml xslt

以下模板修复了img/src属性,并且存在多年:

<xsl:template match="xh:img/@src">
    <xsl:attribute name="src">
        <xsl:value-of select="
            if( string-length(substring-before(substring-after(
                subsequence(parent::node()/following-sibling::comment(),1,1),'src=&quot;'),'.eps')) > 0 )
            then
                concat('images/',tokenize(concat(substring-before(substring-after(
                    subsequence(parent::node()/following-sibling::comment(),1,1),'src=&quot;'),'.eps'),'.png'),'/')[last()])
            else
                data(self::node())"/>
    </xsl:attribute>
</xsl:template>

现在我添加了以下模板,将widthheight移至style

<xsl:template match="xh:img">
    <img style="width:{@width}; height:{@height};">
        <xsl:copy-of select="@*[not(name()='width' or name()='height')]"/>
    </img>
</xsl:template>

第二个有效,但它“禁用”第一个。 如果我评论第二个,第一个工作。 有没有办法合并它们?

我真的没有使用XSL的经验,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

这是因为您使用xsl:copy-of复制匹配xh:img的模板中的属性。这不会应用任何匹配的模板,而只是完全复制它们。

只需更改为使用xsl:apply-templates ...

<xsl:apply-templates select="@*[not(name()='width' or name()='height')]"/>

但是,您可能需要添加其他模板以匹配src以外的其他属性,如果您仍希望创建它们的话。

<xsl:template match="@*">
    <xsl:copy />
</xsl:template>