我想转换这个:
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> </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> </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> </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> </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}}
答案 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>