在 xsl 转换期间将删除回车符

  • 本文关键字:删除 回车 xsl 转换 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?

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

XSLT 的序列化规则允许处理器将行尾输出为 CRLF 而不是单个 NL,但如果您选择的处理器不提供此选项,这对您没有多大帮助 - 而且我不知道有哪个选项。

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

我认为最简单的解决方案是:不要在记事本中查看XML。Windows平台上有很多实用程序可以非常愉快地显示带有NL行结尾的文件,NodePad是唯一一个没有的实用程序。

最新更新