以下模板修复了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="'),'.eps')) > 0 )
then
concat('images/',tokenize(concat(substring-before(substring-after(
subsequence(parent::node()/following-sibling::comment(),1,1),'src="'),'.eps'),'.png'),'/')[last()])
else
data(self::node())"/>
</xsl:attribute>
</xsl:template>
现在我添加了以下模板,将width
和height
移至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的经验,所以任何帮助都会受到赞赏。
答案 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>