我正在使用一些第三方 XSLT,它们大量使用属性集将 XML 转换为各种形式的 XSL:FO。例子:
笔记.xsl:
<xsl:template match="note">
<fo:block xsl:use-attribute-sets="noteAttrs">
<!-- This is a pretty big template with lots of xsl:choose/xsl:if/etc. -->
</fo:block>
<xsl:template>
<xsl:attribute-set name="noteAttrs">
<xsl:attribute name="margin-left">10px</xsl:attribute>
<xsl:attribute name="margin-right">8px</xsl:attribute>
<xsl:attribute name="margin-top">5px</xsl:attribute>
<xsl:attribute name="font-size">10pt</xsl:attribute>
<!-- several other attributes -->
</xsl:attribute>
我的想法是导入这个 XSLT,重新定义我认为合适的属性集。如果我只需要给定 .fo 文档的不同字体大小...
<xsl:import href="notes.xsl"/>
<xsl:attribute-set name="noteAttrs">
<xsl:attribute name="font-size">12pt</xsl:attribute>
</xsl:attribute>
问题是有时我需要完全删除属性(即我从包含的 fo:block 继承),或者给定的 fo 文档将如此不同,以至于重新开始而不是合并我的属性集会更容易来自notes.xsl的那个。XSLT 2.0 中有没有一种方法可以做到这一点,而无需复制整个笔记模板并在 fo:block 上指定不同的属性集?我想我希望能够做这样的事情:
<xsl:import href="notes.xsl"/>
<xsl:attribute-set name="noteAttrs" merge_with_imported_attr_set="false">
<xsl:attribute name="font-size">12pt</xsl:attribute>
</xsl:attribute>
我不能立即切换到 XSLT 3.0 处理器,但是如果 3.0 中有新的东西可以实现这一点,我很想知道它。
谢谢!