2025-03-08 09:00:04

在XSLT中生成新行

我想为XSLT中的文本输出生成换行符。什么好主意吗?


当前回答

我不能只使用<xsl:text>&#xa;</xsl:text>方法,因为如果使用XSLT格式化XML文件,实体就会消失。所以我不得不使用一种稍微迂回的方法来使用变量

<xsl:variable name="nl" select="'&#10;'"/>
<xsl:template match="/">
    <xsl:value-of select="$nl" disable-output-escaping="no"/>
    <xsl:apply-templates select="*"/>
</xsl:template>

其他回答

以下XSL代码将产生换行符(换行符):

<xsl:text>&#xa;</xsl:text>

对于回车,使用:

<xsl:text>&#xd;</xsl:text>

我在这里添加了DOCTYPE指令:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [
  <!ENTITY nl "&#xa;">
]>
<xsl:stylesheet xmlns:x="http://www.w3.org/2005/02/query-test-XQTSCatalog"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="2.0">

这允许我使用&nl;而不是&#xa;在输出中产生换行符。与其他解决方案一样,这通常放在<xsl:text>标记中。

<xsl:text xml:space="preserve">
</xsl:text>

在xsl:output标记中包含属性Method="text",并在xsl中适当的位置在文本内容中包含换行符。如果您希望XSL源代码保持整洁,请使用实体&#10;你想要一条新线。

你可以试试,

<xsl:text>&#xA;</xsl:text>

它会起作用的。