有人知道如何通过XSL-FO转换实现这一点吗?问题的细节应该从下面的代码中清楚。XSL-FO - 如何在两个列表块中继续编号?
Input:
<section>
<title>Section 1</title>
<orderedlist>
<listitem><para>item 1.1</para></listitem>
<listitem>
<para>item 1.2</para>
<orderedlist>
<listitem><para>item a</para></listitem>
<listitem><para>item b</para></listitem>
</orderedlist>
</listitem>
</orderedlist>
</section>
<section>
<title>Section 2</title>
<orderedlist>
<listitem><para>item 2.1</para></listitem>
<listitem><para>item 2.2</para></listitem>
</orderedlist>
</section>
Desired output:
Section 1
1. item 1.1
2. item 1.2
a. item a
b. item b
Section 2
3. item 2.1
4. item 2.2
Here is the XSL file for lists:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<!-- templates for lists - supports numbered and itemized types -->
<!-- the maximum depth is currently 2 -->
<xsl:template match="orderedlist">
<fo:list-block start-indent="0.5cm" space-before="0.2cm"
provisional-distance-between-starts="0.7cm">
<xsl:apply-templates />
</fo:list-block>
</xsl:template>
<xsl:template match="orderedlist//orderedlist">
<fo:list-block start-indent="1.2cm" provisional-distance-between-starts="0.7cm"
padding-top="-0.2cm" padding-bottom="0.2cm">
<xsl:apply-templates />
</fo:list-block>
</xsl:template>
<xsl:template match="itemizedlist">
<fo:list-block start-indent="0.5cm" space-before="0.2cm"
provisional-distance-between-starts="0.7cm">
<xsl:apply-templates />
</fo:list-block>
</xsl:template>
<xsl:template match="itemizedlist//itemizedlist">
<fo:list-block start-indent="1.2cm" provisional-distance-between-starts="0.7cm"
padding-top="-0.2cm" padding-bottom="0.2cm">
<xsl:apply-templates />
</fo:list-block>
</xsl:template>
<xsl:template match="orderedlist/listitem">
<fo:list-item margin-top="0.1cm">
<fo:list-item-label end-indent="label-end()">
<fo:block>
<xsl:number count="listitem" format="1." />
</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>
<xsl:apply-templates />
</fo:block>
</fo:list-item-body>
</fo:list-item>
</xsl:template>
<xsl:template match="orderedlist//orderedlist/listitem">
<fo:list-item>
<fo:list-item-label end-indent="label-end()">
<fo:block>
<xsl:number count="listitem" format="a." />
</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>
<xsl:apply-templates />
</fo:block>
</fo:list-item-body>
</fo:list-item>
</xsl:template>
<xsl:template match="itemizedlist/listitem">
<fo:list-item margin-top="0.1cm">
<fo:list-item-label end-indent="label-end()">
<fo:block>•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>
<xsl:apply-templates />
</fo:block>
</fo:list-item-body>
</fo:list-item>
</xsl:template>
<xsl:template match="itemizedlist//itemizedlist/listitem">
<fo:list-item>
<fo:list-item-label end-indent="label-end()">
<fo:block>•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>
<xsl:apply-templates />
</fo:block>
</fo:list-item-body>
</fo:list-item>
</xsl:template>
</xsl:stylesheet>
您使用的是DocBook吗?你的输入XML看起来像它。 – mzjn
@mzjn不,我使用的只是DocBook标签(以防将来使用DocBook),但我正在使用自己的转换。任何想法如何解决这个问题? – user219882