XSLT生成增量值

时间:2015-04-06 14:00:29

标签: xslt xslt-1.0 xslt-2.0

我有以下xml:

<Details>
    <Head>
        <pageid>123</pageid> <!-- Needs to be sequential starting with 0000000001 -->
    </Head>
    <Start>
        <pageid>124</pageid>
        <value>Details of Minerals</value>
    </Start>
    <Item>
        <pageid>12</pageid>
        <name>Coal</name>
    </Item>
    <Quantity>
        <pageid>45</pageid>
        <value>3</value>
        <comments>NONE MENTIONED</comments>
    </Quantity>
    <Item>
        <pageid>459</pageid>
        <name>MICA</name>
    </Item>
    <Quantity>
        <pageid>65</pageid>
        <value>2</value>
        <comments>NONE MENTIONED</comments>
    </Quantity>
    <END>
        <pageid>78</pageid>
    </END>
</Details>

我希望值pageid为10位数的增量值。

示例o / p

    <Details>
    <Head>
        <pageid>0000000001</pageid>
    </Head>
    <Start>
        <pageid>0000000002</pageid>
        <value>Details of Minerals</value>
    </Start>
    <Item>
        <pageid>0000000003</pageid>
        <name>Coal</name>
    </Item>
    <Quantity>
        <pageid>0000000004</pageid>
        <value>3</value>
        <comments>NONE MENTIONED</comments>
    </Quantity>
    <Item>
        <pageid>0000000005</pageid>
        <name>MICA</name>
    </Item>
    <Quantity>
        <pageid>0000000006</pageid>
        <value>2</value>
        <comments>NONE MENTIONED</comments>
    </Quantity>
    <END>
        <pageid>0000000007</pageid>
    </END>
</Details>

我尝试使用以下构造:

<xsl:variable name="counter" select="0000000000" saxon:assignable="yes"/>

<xsl:template match="//*[local-name()='pageid']">
<saxon:assign name="counter" select="$counter+0000000001"/>
<imp1:Line_id>
<xsl:value-of select="$counter"></xsl:value-of>
</imp1:Line_id>

但这并没有帮助。你能建议一个更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以在此处使用xsl:number元素,而不是尝试使用变量计数器:

<xsl:template match="//*[local-name()='pageid']">
    <imp1:Line_id>
        <xsl:number level="any" format="0000000000" />
    </imp1:Line_id>
</xsl:template>