XSLT:自动换行调整的切换.或者如何在Windows上生成单个LF字符



我编写了一个XSLT,它将在LinuxWindows上运行。输出格式必须始终使用CRLF作为行尾。

没有所有额外逻辑的示例:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="utf-8" method="text" indent="no" omit-xml-declaration="yes" xml:space="default"/>
<xsl:strip-space elements="*" />
<xsl:variable name="NL"><xsl:text>&#xd;&#xa;</xsl:text></xsl:variable>
<xsl:template match="/">
<xsl:text>Hello</xsl:text>
<xsl:value-of select="$NL"/>
<xsl:text>World</xsl:text>
</xsl:template>
</xsl:stylesheet>

期望输出:";Hello\r\nWorld">

尽管在Linux上产生正确的输出;智能;扩展'&xa;'到CRLF(因为这是在Windows上结束的预期行(,所以我以";你好\r\nWorld"。

有没有办法关闭自动处理行尾的功能?(禁用输出转义的试验未成功(

编辑:
我们使用Xalan 2.7.2来处理XSLT(由于我在客户的项目中,我无法切换到Xalan的另一个版本,甚至无法切换到Saxon(

使用IntelliJ运行纯脚本将显示相同的结果。因此,我确信不会有后续的处理步骤破坏我的行结尾。

摘要
Xalan选项成功了!谢谢Martin&Fiona
所以工作的XSLT是这样的。注意评论的三个必要步骤

<!-- 1. Add Xalan namespace -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xalan">
<!-- 2. Set Xalan option line-separator to fix line endings on every platform -->
<xsl:output encoding="utf-8" 
method="text"
indent="no"
omit-xml-declaration="yes"
xml:space="default"
xalan:line-separator="&#xd;&#xa;"
/>
<xsl:strip-space elements="*" />
<!-- 3. Define new line as LF only on every platform -->
<xsl:variable name="NL"><xsl:text>&#xa;</xsl:text></xsl:variable>
<xsl:template match="/">
<xsl:text>Hello</xsl:text>
<xsl:value-of select="$NL"/>
<xsl:text>World</xsl:text>
</xsl:template>
</xsl:stylesheet>

您可以尝试以下两个选项之一:

选项A:手动设置Xalan XML属性

  1. 在样式表声明中添加以下内容:
xmlns:xalan=http://xml.apache.org/xalan
  1. 然后在模板中添加以下内容:
<xsl:output xalan:line-separator="&#10;" />

选项B:更改$var

来自:

<xsl:variable name="NL"><xsl:text>&#xd;&#xa;</xsl:text></xsl:variable>

到:

<xsl:variable name="NL"><xsl:text>&#xA;</xsl:text></xsl:variable>

您可以在XML编辑器中测试它,该编辑器允许您插入不同的转换器:Xalan、Saxon、Xsltproc。我用Xalan|Saxon测试了两个选项。它产生一致的结果,使您有信心向API部署。(XML和Java是独立于平台的。(

最新更新