XSL-FO中的章节编号

时间:2013-04-16 10:32:17

标签: xslt xsl-fo

我有xml的形式:                第1章                第1.1章         
           第1.1.1节                              第1.2章          

<CHAPTER>
 <LONG-NAME>Chapter 2</LONG-NAME>
  <CHAPTER>
 <LONG-NAME>Chapter 2.1</LONG-NAME>
 </CHAPTER>
 <CHAPTER>
 <LONG-NAME>Chapter 2.2</LONG-NAME>
 </CHAPTER>
</CHAPTER>
</REPORT-BODY>

一章内可以有任意数量的章节。 如何编写xsl-fo以获取out pdf如下:

1. Chapter 1
1.1 chapter 1.1
1.1.1 Chapter 1.1.1
1.2 Chapter 1.2

2.Chapter 2
2.1 Chapter 2.1
2.2 Chapter 2.2

我尝试使用:

 <xsl:template
    match="CHAPTER/LONG-NAME">
   <fo:block
        color="#374B80"
        font-size="12px"
        font-family="Helvetica"
        font-weight="bold"
        padding-top="3px"
        padding-bottom="3px">
<xsl:if test="ancestor::REPORT-BODY">
    <xsl:variable name="chapNum">
    <xsl:number from="CHAPTER" count="LONG-NAME" format="1 " level="any"/>
    </xsl:variable>
   <xsl:value-of select="$chapNum"/>    
   </xsl:if>
<xsl:if test="ancestor::CHAPTER">
<xsl:variable name="chapNumber">
<xsl:text>.</xsl:text>
  <xsl:number from="CHAPTER/CHAPTER" count="LONG-NAME" format="1. " level="any"/>
  </xsl:variable>   
  <xsl:value-of select="$chapNumber"/>  
   </xsl:if>      
   <xsl:apply-templates/>
   </fo:block>
   </xsl:template>

但我无法达到所需的编号。

1 个答案:

答案 0 :(得分:2)

尝试使用xsl:number,如下所示:

<xsl:number format="1. " count="CHAPTER" level="multiple"/>

您应该可以使用以下模板替换模板:

<xsl:template match="CHAPTER/LONG-NAME">
    <fo:block
        color="#374B80"
        font-size="12px"
        font-family="Helvetica"
        font-weight="bold"
        padding-top="3px"
        padding-bottom="3px">
        <xsl:number format="1. " count="CHAPTER" level="multiple"/>     
        <xsl:value-of select="."/>
    </fo:block>
</xsl:template>