使用XSLT从XML增加TXT中的行

时间:2015-04-24 15:58:26

标签: xml xslt

我想转换这个:

000001  HEADER
000002  404TELE001NYC
000003  Teleford communications
000004  57 Harpermoorish Ave
000005  405TELE001NYC
000006  Teleford communications
000007  57 Harpermoorish Ave
000008  402TELE003TOK
000009  Integration International
000010  49, Station Road

进入此txt文件:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ns2="FPPD2.srdl">
<xsl:output method="text"/>

<xsl:variable name="some_spaces" select="'                                                '" />

<xsl:template match="/ns2:Report">
<xsl:text>000001    HEADER</xsl:text>
<xsl:text>&#10;</xsl:text>
    <xsl:apply-templates select="ns2:Detail_2_1/ns2:Detail_2_1_Group_Collection/ns2:Item"/>                                                                                                                                          38415740000027VET</xsl:text>
</xsl:template>

<xsl:template match="ns2:Item">
    <xsl:value-of select='format-number(position(), "000000")'/>
    </xsl:call-template>
    <xsl:call-template name="pad">
        <xsl:with-param name="text" select="@transactionReference"/>
        <xsl:with-param name="width" select="18"/>
    </xsl:call-template>
    <xsl:text>&#10;</xsl:text>
    <xsl:value-of select='format-number(position(), "000000")'/>
    <xsl:call-template name="pad">
        <xsl:with-param name="text" select="@description_2"/>
        <xsl:with-param name="width" select="18"/>
    </xsl:call-template>
    <xsl:text>&#10;</xsl:text>
    <xsl:value-of select='format-number(position(), "000000")'/>
    <xsl:call-template name="pad">
        <xsl:with-param name="text" select="@addressLine1_1"/>
        <xsl:with-param name="width" select="18"/>
    </xsl:call-template>
    <xsl:text>&#10;</xsl:text>
</xsl:template>

<xsl:template name="pad">
    <xsl:param name="text" />
    <xsl:param name="width" />
    <xsl:value-of select="substring(concat($text, $some_spaces), 1, $width)"/>
</xsl:template>
</xsl:stylesheet>

我只有递增号码的问题。如果我用这个:

000001  HEADER
000001  404TELE001NYC
000001  Teleford communications
000001  57 Harpermoorish Ave
000002  405TELE001NYC
000002  Teleford communications
000002  57 Harpermoorish Ave
000003  402TELE003TOK
000003  Integration International
000003  49, Station Road

我得到了这个(因为position()函数查看源XML中的项目,当然不是目标txt中的项目)。因此,目的是将txt文件中的所有行增加1.项目从第2行开始(第一行是标题,因此我有硬编码的000001)。

{{1}}

1 个答案:

答案 0 :(得分:0)

看看这是否适合您:

<xsl:template match="ns1:Item">
    <xsl:variable name="i" select="position()" />
    <xsl:for-each select="@Data1 | @Data2 | @Data3">
        <xsl:value-of select="3 * ($i - 1) + position()"/>
    </xsl:for-each>
</xsl:template>