XML到平面文件

时间:2018-11-19 05:23:29

标签: xml xslt flat-file

我正在尝试将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>

1 个答案:

答案 0 :(得分:0)

如果您希望它们在同一行上,请删除第30-31行上的换行符:

    <xsl:text>
    </xsl:text>