none
XSLT 语法详解: xsl:attribute-set RRS feed

  • 常规讨论

  • XSLT 语法详解: xsl:attribute-set
    <xsl:attribute-set>提供在输出文档中创建一组元素属性的功能,可以通过名字引用整个属性组,而不用单个地创建它们。

    必需属性:
        name: 该属性定义属性组的名字。

    可选属性:
       use-attribute-sets:该属性可以列出属性组中引用的其他一个或多个属性组,如果引用了多个属性组需要用空格隔开它们。使用这个属性可以是一个属性组嵌入另一个属性组,但是如果一个属性组直接或间接地嵌入了自己,将会产品错误。换句话说,如果属性组A内嵌了B,B内嵌C,而C内嵌了A, XSLT解析器将会报告错误。

    <xsl:attribute-set>可以包含一个或多个<xsl:attribute>。<xsl:attribute-set>是一个顶级元素,只能作为<xsl:stylesheet>的子元素。

    实例:我们用属性组来定义不同的文本字体及大小,并且为了易于区分,我们采用XSL-FO将XML文档转换成PDF文件。
    XSLT源码:

    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:fo="http://www.w3.org/1999/XSL/Format">

      <xsl:output method="html"/>

      <xsl:attribute-set name="regular-text">
        <xsl:attribute name="font-size">12pt</xsl:attribute>
        <xsl:attribute name="font-family">sans-serif</xsl:attribute>
      </xsl:attribute-set>

      <xsl:attribute-set name="emphasized-text" use-attribute-sets="regular-text">
        <xsl:attribute name="font-style">italic</xsl:attribute>
      </xsl:attribute-set>

      <xsl:attribute-set name="large-text" use-attribute-sets="regular-text">
        <xsl:attribute name="font-size">18pt</xsl:attribute>
        <xsl:attribute name="font-weight">bold</xsl:attribute>
        <xsl:attribute name="space-after.optimum">21pt</xsl:attribute>
      </xsl:attribute-set>

      <xsl:template match="/">
        <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
          <fo:layout-master-set>
            <fo:simple-page-master margin-right="75pt" margin-left="75pt"
              page-height="11in" page-width="8.5in"
              margin-bottom="25pt" margin-top="25pt" master-name="main">
              <fo:region-before extent="25pt"/>
              <fo:region-body margin-top="50pt" margin-bottom="50pt"/>
              <fo:region-after extent="25pt"/>
            </fo:simple-page-master>
            <fo:page-sequence-master master-name="standard">
              <fo:repeatable-page-master-alternatives>
                <fo:conditional-page-master-reference master-name="main"
                  odd-or-even="any"/>
              </fo:repeatable-page-master-alternatives>
            </fo:page-sequence-master>
          </fo:layout-master-set>
         
          <fo:page-sequence master-name="standard">
            <fo:flow flow-name="xsl-region-body">
              <xsl:apply-templates select="list"/>
            </fo:flow>
          </fo:page-sequence>
        </fo:root>
      </xsl:template>

      <xsl:template match="list">
        <fo:block xsl:use-attribute-sets="large-text">
          <xsl:value-of select="title"/>
        </fo:block>
        <fo:list-block provisional-distance-between-starts="0.4cm"
          provisional-label-separation="0.15cm">
          <xsl:for-each select="listitem">
            <fo:list-item start-indent="0.5cm" space-after.optimum="17pt">
              <fo:list-item-label>
                <fo:block xsl:use-attribute-sets="regular-text">*</fo:block>
              </fo:list-item-label>
              <fo:list-item-body>
                <fo:block xsl:use-attribute-sets="emphasized-text">
                  <xsl:value-of select="."/>
                </fo:block>
              </fo:list-item-body>
            </fo:list-item>
          </xsl:for-each>
        </fo:list-block>
      </xsl:template>

    </xsl:stylesheet>


    XML文档为:
    <?xml version="1.0"?>
    <list>
      <title>A few of my favorite albums</title>
      <listitem>A Love Supreme</listitem>
      <listitem>Beat Crazy</listitem>
      <listitem>Here Come the Warm Jets</listitem>
      <listitem>Kind of Blue</listitem>
      <listitem>London Calling</listitem>
      <listitem>Remain in Light</listitem>
      <listitem>The Joshua Tree</listitem>
      <listitem>The Indestructible Beat of Soweto</listitem>
    </list>

    转换后的PDF文件为:

    2009年6月1日 1:44