0

在 xsl fo 中,我需要标记/计算一个名为prcitem1using的元素xsl:number,但我只想定位prcitem1具有名为 的第二个后代的元素para

编号的工作原理是唯一标记的元素是我刚刚描述的元素,但是如果有一个prcitem1元素不符合标准,即使没有显示标签,它仍然会被计算在内。这会导致编号不正确,就像它会从 B. 而不是 A. 开始,因为第一个prcitem1元素不符合条件但仍被计算在内。

我正在使用<xsl:number count="self::*[./prcitem1/para] format="A" from="task". Task 是 for 的包含元素prcitem1,我从prcitem1模板内部开始计数。有谁知道如何处理这个?

4

1 回答 1

0

你应该只需要这样计算prcitem1[para]

<xsl:number format="A" from="task" count="prcitem1[para]"/>

这是一个例子。它可能与您的不完全匹配,但应该接近...

XML 输入

<doc>
    <task>
        <prclist1>
            <prcitem1>
                <prcitem>
                    <para>prcitem 1A</para>
                </prcitem>
            </prcitem1>
            <prcitem1>
                <prcitem>
                    <para>prcitem 2A</para>
                </prcitem>
            </prcitem1>
            <prcitem1/>
            <prcitem1>
                <prcitem>
                    <para>prcitem 4A</para>
                </prcitem>
            </prcitem1>
        </prclist1>
        <prclist1>
            <prcitem1>
                <prcitem>
                    <para>prcitem 1B</para>
                </prcitem>
            </prcitem1>
            <prcitem1/>
            <prcitem1>
                <prcitem>
                    <para>prcitem 3B</para>
                </prcitem>
            </prcitem1>
            <prcitem1>
                <prcitem>
                    <para>prcitem 4B</para>
                </prcitem>
            </prcitem1>
        </prclist1>
    </task>
</doc>

XSLT 2.0(将按原样作为 1.0 工作。)

<xsl:stylesheet version="2.0" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="doc">
        <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
            <fo:layout-master-set>
                <fo:simple-page-master master-name="my-page" page-width="8.5in" page-height="11in">
                    <fo:region-body margin="1in" margin-top="1.5in" margin-bottom="1.5in"/>
                </fo:simple-page-master>
            </fo:layout-master-set>
            <fo:page-sequence master-reference="my-page">
                <fo:flow flow-name="xsl-region-body">
                    <xsl:apply-templates/>
                </fo:flow>
            </fo:page-sequence>
        </fo:root>
    </xsl:template>

    <xsl:template match="prclist1">
        <fo:list-block font-size="10pt" provisional-distance-between-starts="24pt" space-before=".1in" space-after=".1in" keep-with-next.within-page="always">
            <xsl:apply-templates/>
        </fo:list-block>
    </xsl:template>

    <xsl:template match="prcitem1[prcitem/para]">
        <fo:list-item>
            <fo:list-item-label end-indent="label-end()" font-size="12pt" font-weight="bold">
                <fo:block>
                    <xsl:number format="A" from="task" count="prcitem1[prcitem/para]"/>
                </fo:block>
            </fo:list-item-label>
            <fo:list-item-body start-indent="body-start()" font-size="12pt">
                <fo:block>
                    <xsl:apply-templates select="prcitem/para"/>
                </fo:block>
            </fo:list-item-body>
        </fo:list-item>
    </xsl:template>

</xsl:stylesheet>

FO 输出

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
   <fo:layout-master-set>
      <fo:simple-page-master master-name="my-page" page-width="8.5in" page-height="11in">
         <fo:region-body margin="1in" margin-top="1.5in" margin-bottom="1.5in"/>
      </fo:simple-page-master>
   </fo:layout-master-set>
   <fo:page-sequence master-reference="my-page">
      <fo:flow flow-name="xsl-region-body">
         <fo:list-block font-size="10pt"
                        provisional-distance-between-starts="24pt"
                        space-before=".1in"
                        space-after=".1in"
                        keep-with-next.within-page="always">
            <fo:list-item>
               <fo:list-item-label end-indent="label-end()" font-size="12pt" font-weight="bold">
                  <fo:block>A</fo:block>
               </fo:list-item-label>
               <fo:list-item-body start-indent="body-start()" font-size="12pt">
                  <fo:block>prcitem 1A</fo:block>
               </fo:list-item-body>
            </fo:list-item>
            <fo:list-item>
               <fo:list-item-label end-indent="label-end()" font-size="12pt" font-weight="bold">
                  <fo:block>B</fo:block>
               </fo:list-item-label>
               <fo:list-item-body start-indent="body-start()" font-size="12pt">
                  <fo:block>prcitem 2A</fo:block>
               </fo:list-item-body>
            </fo:list-item>
            <fo:list-item>
               <fo:list-item-label end-indent="label-end()" font-size="12pt" font-weight="bold">
                  <fo:block>C</fo:block>
               </fo:list-item-label>
               <fo:list-item-body start-indent="body-start()" font-size="12pt">
                  <fo:block>prcitem 4A</fo:block>
               </fo:list-item-body>
            </fo:list-item>
         </fo:list-block>
         <fo:list-block font-size="10pt"
                        provisional-distance-between-starts="24pt"
                        space-before=".1in"
                        space-after=".1in"
                        keep-with-next.within-page="always">
            <fo:list-item>
               <fo:list-item-label end-indent="label-end()" font-size="12pt" font-weight="bold">
                  <fo:block>A</fo:block>
               </fo:list-item-label>
               <fo:list-item-body start-indent="body-start()" font-size="12pt">
                  <fo:block>prcitem 1B</fo:block>
               </fo:list-item-body>
            </fo:list-item>
            <fo:list-item>
               <fo:list-item-label end-indent="label-end()" font-size="12pt" font-weight="bold">
                  <fo:block>B</fo:block>
               </fo:list-item-label>
               <fo:list-item-body start-indent="body-start()" font-size="12pt">
                  <fo:block>prcitem 3B</fo:block>
               </fo:list-item-body>
            </fo:list-item>
            <fo:list-item>
               <fo:list-item-label end-indent="label-end()" font-size="12pt" font-weight="bold">
                  <fo:block>C</fo:block>
               </fo:list-item-label>
               <fo:list-item-body start-indent="body-start()" font-size="12pt">
                  <fo:block>prcitem 4B</fo:block>
               </fo:list-item-body>
            </fo:list-item>
         </fo:list-block>
      </fo:flow>
   </fo:page-sequence>
</fo:root>

PDF 输出

在此处输入图像描述

于 2013-03-17T01:52:54.157 回答