我想为XSLT中的文本输出生成换行符。什么好主意吗?
当前回答
我赞同尼克·吉布森的方法,这是 我最喜欢的是:
<xsl:variable name='nl'><xsl:text>
</xsl:text></xsl:variable>
然而,我一直在使用Ant任务<echoxml>到 创建样式表并针对文件运行它们。的 task将做属性值模板,例如${DSTAMP}, 但它也会重新格式化xml,所以 在这种情况下,最好使用实体引用。
<xsl:variable name='nl'><xsl:text>
</xsl:text></xsl:variable>
其他回答
在xsl:output标记中包含属性Method="text",并在xsl中适当的位置在文本内容中包含换行符。如果您希望XSL源代码保持整洁,请使用实体 你想要一条新线。
我发现了<xsl:text>中的文字换行符和使用
的文字换行符之间的区别。
虽然文字换行符在我的环境中工作得很好(使用Saxon和默认的Java XSLT处理器),但当在. net环境中运行的另一个组执行代码时,我的代码失败了。
更改为实体(
)使我的文件生成代码在Java和. net上一致地运行。
此外,文字换行符很容易被ide重新格式化,当文件由“不知情”的人维护时,可能会无意中丢失。
<xsl:text> </xsl:text>
参见示例
<xsl:variable name="module-info">
<xsl:value-of select="@name" /> = <xsl:value-of select="@rev" />
<xsl:text> </xsl:text>
</xsl:variable>
如果你把它写在文件中。
<redirect:write file="temp.prop" append="true">
<xsl:value-of select="$module-info" />
</redirect:write>
这个变量将生成一个新的行文件,如下:
commons-dbcp_commons-dbcp = 1.2.2
junit_junit = 4.4
org.easymock_easymock = 2.4
我不能只使用<xsl:text>
</xsl:text>方法,因为如果使用XSLT格式化XML文件,实体就会消失。所以我不得不使用一种稍微迂回的方法来使用变量
<xsl:variable name="nl" select="' '"/>
<xsl:template match="/">
<xsl:value-of select="$nl" disable-output-escaping="no"/>
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:text xml:space="preserve">
</xsl:text>