使用XSLT创建DAT文件



我有一个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>

我错过了什么吗?由于

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

这里是变量newline:

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

希望这能帮助到有同样问题的人。

最新更新