在xsl转换期间删除回车

时间:2018-09-03 14:53:36

标签: xslt ant

我正在使用Ant xslt任务转换XML文件。 我在原始文件中每行的末尾都有CR-LF,只有LF保留在转换后的文件中。因此,所有内容都放在一行中。

XSL代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="xml" indent="yes" encoding="UTF-8" />
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="model[@name='docInfoDefaultDetails']">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
            <xsl:if test="not(action[@name='attachments'])">
                <action name="attachments" type="object"/>
            </xsl:if>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Ant任务($ {UpdateTest_xml}链接到原始xml文件,$ {UpdateTest_xsl}链接到xsl文件):

<xslt extension=".xml" in="${UpdateTest_xml}" out="${UpdateTest_xml}.bak.xml"
          style="${UpdateTest_xsl}">
</xslt>

如何保存CR?

1 个答案:

答案 0 :(得分:0)

正如@MartinHonnen指出的那样,要求XML解析器将行尾标准化为单个NL字符,因此,当XSLT看到内容时,CR字符已经消失了。

XSLT的序列化规则允许处理器以CRLF而不是单个NL的形式输出行尾,但是如果您选择的处理器不提供此选项,那么这对您没有太大帮助-而且我不知道任何可以的。

(@ MartinHonnen提到的输出参数saxon:newline仅影响文本输出方法,而不影响HTML或XML输出方法。)

我认为最简单的解决方案是:不要在NotePad中查看XML。 Windows平台上有很多实用程序可以很高兴地显示带有NL行尾的文件,而NodePad大约是唯一没有的工具。