我有一个XSL样式表,内容在xsl:text
节点中,如下所示:
<xsl:text>
foo
bar
baz
</xsl:text>
样式表本身是一个带有“unix-style”换行符终结符的文本文件。我在Windows上调用此样式表以及类似unix的平台。将输出符合调用它的平台的约定会很好。
当我在Windows上运行此样式表时,输出具有所有内容的回车/换行符对,除了 xsl:text
节点的内容。
我可以指示XSLT处理器将xsl:text
节点内容中的换行符转换为特定于平台的行尾吗?
更多上下文:我正在调用Apache Ant 1.7.1 XSLT task中的样式表,如下所示:
<xslt in="in.xml" out="out.xml" style="stylesheet.xsl"/>
样式表标题目前如下所示:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xslt"
exclude-result-prefixes="xalan">
<!-- contents elided -->
</xsl:stylesheet>
答案 0 :(得分:5)
您可以为样式表定义参数,如下所示:
<xsl:param name="br">
<xsl:text> </xsl:text>
</xsl:param>
并使用Ant脚本中的嵌套param元素传入适当的行尾字符。当然,这个例子中的默认值是Unix风格的换行符。我想输出值,你必须使用:
<xsl:copy-of select="$br"/>
这很冗长,但确实有效。
答案 1 :(得分:4)
如果您从Ant调用转换,则you can test for the OS using a conditional task with a test for the OS family:
<condition property="linebreak" value="
">
<os family="windows"/>
</condition>
<condition property="linebreak" value="
">
<os family="unix"/>
</condition>
然后将该参数传递给XSLT,以指示您要使用哪个换行符。
<xslt in="data.xml" out="${out.dir}/out.xml">
<param name="linebreak" expression="${linebreak}" />
</xslt>
答案 2 :(得分:1)
我不确定如何自动执行正确的换行符(可能取决于您使用的xslt处理器),但您可以强制在文本节点的内容中添加换行符。 \ r \ n是
 

,\ n是

,例如你会用:
<xsl:text>foo
bar
</xsl:text>
获取您正在寻找的输出。
答案 3 :(得分:0)
好吧,我让我的工作(使用Saxon)结合了上述两个想法:
<xsl:param name="br">
<xsl:text>
</xsl:text>
</xsl:param>
然后在需要时使用这些行。
<xsl:value-of select="$br" />
这是我的完整(但细长)xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--<xsl:strip-space elements="*" />-->
<xsl:output method="text" />
<!-- <xsl:preserve-space elements="*"/>-->
<xsl:param name="br">
<xsl:text>
</xsl:text>
</xsl:param>
<!-- -->
<xsl:template match="/">
<xsl:for-each select="//root/Item">
<xsl:value-of select="@Name" /> <!-- Your xpath will vary of course! -->
<xsl:value-of select="$br" />
</xsl:for-each>
</xsl:template>
同样,我正在使用撒克逊人 的%ProgramFiles%\ SaxonHE \ BIN \ Transform.exe 在Windows 7 x64机器上。