使用XSLT创建DAT文件

时间:2014-03-17 16:48:09

标签: xml xslt newline flat-file

我有一个xslt文件,可以创建一个简单的平面文件。 输出文件最初具有.txt扩展名,但现在它需要是.dat扩展名。 一切都很完美,但是一旦我更改了扩展名,.dat文件就无法正确解释换行符。

这是我的XSLT文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions">

<xsl:output method="text" encoding="utf-8"  />
<xsl:strip-space  elements="*"/>

<!-- Output File type is .DAT => This extension uses a different value for new line characters -->
<xsl:variable name="newline" select="'&#10;'"/>
<!-- <xsl:variable name='newline'><xsl:text> -->
<!-- </xsl:text></xsl:variable> -->
<xsl:variable name="tab" select="'&#x09;'" />
<xsl:variable name="comma" select="'&#x2C;'" />
<xsl:variable name="padding" select="'                              '" /> <!-- 30 spaces for padding -->
<xsl:variable name="zeroes">00000000000</xsl:variable>
<xsl:variable name="sevzeroes">0000000</xsl:variable>

    <xsl:template match="/">
        <xsl:for-each select="/ROOT/Payment">

                <!-- Filler -->
                <xsl:value-of select="substring(concat($padding, $padding), 1, 31)"/>
                <!-- Check Amount -->
                <xsl:value-of select="substring(concat($zeroes, amount), (1 + string-length(amount)), (11 + string-length(amount)))"/>

                <!-- Credit Indicator -->
                <xsl:choose>
                    <xsl:when test="is_void = 0">
                        <xsl:text> </xsl:text>
                    </xsl:when>
                    <xsl:when test="is_void = 1">
                        <xsl:text>C</xsl:text>
                    </xsl:when>
                </xsl:choose>

                <!-- Filler -->
                <xsl:text> </xsl:text>
                <!-- Check Number -->
                <xsl:value-of select="substring(concat($sevzeroes, check_number), (1 + string-length(check_number)), (7 + string-length(check_number)))"/>

                <!-- Check Date -->
                <!-- Incoming Date Format 2014-03-11-07:00 -->
                <xsl:variable name="firstDate" select="last_printed" />
                <xsl:variable name="day" select="substring-before(substring-after(substring-after($firstDate, '-'), '-'), '-')"/>
                <xsl:variable name="month" select="substring-before(substring-after($firstDate, '-'), '-')"/>
                <xsl:variable name="year" select="substring-before($firstDate, '-')"/>

                <xsl:value-of select="substring(concat($month, $day, $year, $padding), 1, 8)"/>

                <!-- TYPE -->
                <xsl:text>S</xsl:text>
                <!-- Filler -->
                <xsl:value-of select="substring(concat($padding, $padding), 1, 31)"/>

                <xsl:value-of select="$newline"/>
<!--            </xsl:if> -->
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

我尝试将换行变量的值设置为&#x0A&#x0D0A&#10,甚至使用<xsl:variable name='newline'><xsl:text> </xsl:text></xsl:variable>

我在这里遗漏了什么吗? 感谢

1 个答案:

答案 0 :(得分:1)

我发现答案是使用x0Dx0A来修改换行变量的值。

这是变量换行符:

<xsl:variable name="newline" select="'&#x0D;&#x0A;'"/>

希望这有助于其他人遇到同样的问题。