xsl:attribute-set没有正确地从xsl:attribute-set继承

时间:2012-11-10 20:43:52

标签: xslt

我似乎无法继承使用xsl:use-attribute-sets。 Michael Kay在第6章中说过.XSLT Elements> xsl:attribute-set - Pg。 269那

  

如果重复使用这些属性组合,也可以   定义为本身设置的属性,如:

<xsl:attribute-set name="ruled-table" use-attribute-set="full-width-table"> 
 <xsl:attribute name="border">2</xsl:attribute> 
 <xsl:attribute name="rules">cols</xsl:attribute> 
</xsl:attribute-set>

编辑1:使用 - 属性 - 设置使用 - 属性集可能是书中的一个类型;我正在使用 XSL:USE-ATTRIBUTE-SETS

这对我不起作用。换句话说,在我目前的设置[通过Apache Cocoon的XSLT 2.0,将styles.xsl导入mypdf.xsl]中的结果

<table xsl:use-attribute-sets="ruled-table"> 
<tr>...</tr> 
</table> 

将是属性集 ruled-table 全角集差异,而不是先例介导的集联合这两个属性集。我只获取直接命名的属性,而不是名为的属性集的父属性集。我可以通过这样做来模拟效果:

<table xsl:use-attribute-sets="full-width-table ruled-table"> 
<tr>...</tr> 
</table> 
然而,似乎这应该是不必要的。有人遇到过这个问题吗?这是styles.xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" exclude-result-prefixes="xsl xs fo">

  <xsl:attribute-set name="fontstack">
    <xsl:attribute name="text-align">left</xsl:attribute>
    <xsl:attribute name="font-size">10pt</xsl:attribute>
    <xsl:attribute name="font-family">"TradeGothic-CondEighteen", "Trade Gothic Cond Eighteen", "Trade Gothic Condensed Eighteen", "Trade Gothic", "TradeGothic", "Trade-Gothic", "ArialNarrow", "Arial-Narrow", "Arial Narrow", Arial, sans-serif
    </xsl:attribute>
    <xsl:attribute name="color">black</xsl:attribute>
  </xsl:attribute-set>

  <xsl:attribute-set name="headers" xsl:use-attribute-sets="fontstack">
    <xsl:attribute name="font-size">18pt</xsl:attribute>
    <xsl:attribute name="font-weight">bold</xsl:attribute>
    <xsl:attribute name="space-after">7pt</xsl:attribute>
    <xsl:attribute name="padding">12pt</xsl:attribute>
  </xsl:attribute-set>

  <xsl:attribute-set name="h2" xsl:use-attribute-sets="headers">
    <xsl:attribute name="padding">5pt</xsl:attribute>
  </xsl:attribute-set>

  <xsl:attribute-set name="h3" xsl:use-attribute-sets="headers">
    <xsl:attribute name="padding">2pt</xsl:attribute>
  </xsl:attribute-set>

</xsl:stylesheet>

1 个答案:

答案 0 :(得分:2)

有两个问题可能导致您的问题。

1。)您在xsl:attribute-set element的第一个示例中指定了属性use-attribute-set,但它必须是复数use-attribute-sets

<xsl:attribute-set name="ruled-table" use-attribute-sets="full-width-table"> 
    <xsl:attribute name="border">2</xsl:attribute> 
    <xsl:attribute name="rules">cols</xsl:attribute> 
</xsl:attribute-set>

2.。)在样式表中,您使用xsl:attribute-set element上的属性xsl:use-attribute-sets,但它必须是非命名空间限定属性use-attribute-sets

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" exclude-result-prefixes="xsl xs fo">

    <xsl:attribute-set name="fontstack">
        <xsl:attribute name="text-align">left</xsl:attribute>
        <xsl:attribute name="font-size">10pt</xsl:attribute>
        <xsl:attribute name="font-family">"TradeGothic-CondEighteen", "Trade Gothic Cond Eighteen", "Trade Gothic Condensed Eighteen", "Trade Gothic", "TradeGothic", "Trade-Gothic", "ArialNarrow", "Arial-Narrow", "Arial Narrow", Arial, sans-serif
        </xsl:attribute>
        <xsl:attribute name="color">black</xsl:attribute>
    </xsl:attribute-set>

    <xsl:attribute-set name="headers" use-attribute-sets="fontstack">
        <xsl:attribute name="font-size">18pt</xsl:attribute>
        <xsl:attribute name="font-weight">bold</xsl:attribute>
        <xsl:attribute name="space-after">7pt</xsl:attribute>
        <xsl:attribute name="padding">12pt</xsl:attribute>
    </xsl:attribute-set>

    <xsl:attribute-set name="h2" use-attribute-sets="headers">
        <xsl:attribute name="padding">5pt</xsl:attribute>
    </xsl:attribute-set>

    <xsl:attribute-set name="h3" use-attribute-sets="headers">
        <xsl:attribute name="padding">2pt</xsl:attribute>
    </xsl:attribute-set>

</xsl:stylesheet>