我正在使用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?
答案 0 :(得分:0)
正如@MartinHonnen指出的那样,要求XML解析器将行尾标准化为单个NL字符,因此,当XSLT看到内容时,CR字符已经消失了。
XSLT的序列化规则允许处理器以CRLF而不是单个NL的形式输出行尾,但是如果您选择的处理器不提供此选项,那么这对您没有太大帮助-而且我不知道任何可以的。
(@ MartinHonnen提到的输出参数saxon:newline
仅影响文本输出方法,而不影响HTML或XML输出方法。)
我认为最简单的解决方案是:不要在NotePad中查看XML。 Windows平台上有很多实用程序可以很高兴地显示带有NL行尾的文件,而NodePad大约是唯一没有的工具。