我正在尝试将XML转换为平面文件。我是XSLT的新手,但遇到了一些小问题。我在两条不同的行中获得了Header Record和Trailer Record,但我希望它们在一行中。另外,如果在xml中填充符的长度小于100,我想在平面文件中追加空格,所以这是我的xml
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<HeaderRecord>
<FileType>35</FileType>
<Filler>0000000</Filler>
<ControlVoucher>
<ControlVoucherType>52</ControlVoucherType>
<DirectCredit>
<Filler>000</Filler>
<value>20001016756726</value>
</DirectCredit>
</ControlVoucher>
<ControlVoucher>
<ControlVoucherType>51</ControlVoucherType>
<DirectDebit>
<Filler>000</Filler>
<value>20001016756</value>
</DirectDebit>
</ControlVoucher>
</HeaderRecord>
<TrailerRecord>
<TotalValue>00000000000001475144</TotalValue>
<Filler>00000000000000</Filler>
</TrailerRecord>
</Root>
我的XSLT是
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="text" omit-xml-declaration="yes"
indent="no" media-type="text/plain" />
<xsl:strip-space elements="*" />
<xsl:template match="Root">
<xsl:for-each select="HeaderRecord">
<xsl:text>00</xsl:text>
<xsl:value-of select="FileType" />
<xsl:value-of select="Filler" />
<xsl:for-each select="ControlVoucher">
<xsl:text>88</xsl:text>
<xsl:value-of select="ControlVoucherType" />
<xsl:choose>
<xsl:when test="ControlVoucherType = 52">
<xsl:for-each select="DirectCredit">
<xsl:value-of select="Filler" />
<xsl:value-of select="value" />
</xsl:for-each>
</xsl:when>
<xsl:when test="ControlVoucherType = 51">
<xsl:for-each select="DirectDebit">
<xsl:value-of select="Filler" />
<xsl:value-of select="value" />
</xsl:for-each>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:for-each>
<xsl:for-each select="TrailerRecord">
<xsl:text>99</xsl:text>
<xsl:value-of select="TotalValue" />
<xsl:value-of select="Filler" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
如果您希望它们在同一行上,请删除第30-31行上的换行符:
<xsl:text>
</xsl:text>