如何使用XSLT2重新编号html4锚标签来引用文档页码而不是物理页面?

时间:2016-05-31 15:53:55

标签: xslt-2.0

文档的每个页面上都有与TOC相关的锚标记,但它们也位于封面页上,因此锚页1是封面。我需要将第3个物理页面(sumpage1)作为锚点页面1.如何重置锚点标签以使文档页面1成为第3页,并且后续的锚点号码也会重新设置为新的sumpage1编号?

期望的结果:

    <Hpage Hplname="cover">
        <DIV style="padding: 4pt; width: 98%; display: block;">
            <P style="font: 8pt Arial, Helvetica, Sans-Serif;">

            </P>

    <Hpage Hplname="sumpage1">
        <DIV style="padding: 4pt; width: 98%; display: block;">
            <P style="font: 8pt Arial, Helvetica, Sans-Serif;">
                <A href="#tocpage">Back to Contents</A>
                <A name="toc1"/>
            </P>

在sumpage1页面之后allpagel应该是toc2(依此类推):

    <Hpage Hplname="allpagel">
        <DIV style="padding: 4pt; width: 98%; display: block;">
            <P style="font: 8pt Arial, Helvetica, Sans-Serif;">
                <A href="#tocpage">Back to Contents</A>
                <A name="toc4"/>
            </P>

1 个答案:

答案 0 :(得分:1)

我猜你可以使用身份转换模板

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

加上空

<xsl:template match="Hpage[@Hplname = 'cover']//A[@name]"/>

从封面上移除锚点

<xsl:template match="Hpage[not(@Hplname = 'cover')]//A[@name]">
  <xsl:variable name="count" as="xs:integer">
    <xsl:number count="Hpage[not(@Hplname = 'cover')]//A[@name]" level="any"/>
  </xsl:variable>
  <A name="toc{$count}"/>
</xsl:template>

Hpage元素内的锚点进行编号。