我想为XSLT中的文本输出生成换行符。什么好主意吗?
当前回答
你可以试试,
<xsl:text>
</xsl:text>
它会起作用的。
其他回答
在xsl:output标记中包含属性Method="text",并在xsl中适当的位置在文本内容中包含换行符。如果您希望XSL源代码保持整洁,请使用实体 你想要一条新线。
我最喜欢的方法如下:
<xsl:stylesheet>
<xsl:output method='text'/>
<xsl:variable name='newline'><xsl:text>
</xsl:text></xsl:variable>
<!-- note that the layout there is deliberate -->
...
</xsl:stylesheet>
然后,无论何时你想输出换行符(也许在csv中),你都可以输出如下内容:
<xsl:value-of select="concat(elem1,elem2,elem3,$newline)" />
我在从xml输入输出sql时使用过这种技术。事实上,我倾向于为逗号、引号和换行符创建变量。
我赞同尼克·吉布森的方法,这是 我最喜欢的是:
<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:variable>子句内生成新行是行不通的。 我想做的是:
<xsl:variable name="myVar">
<xsl:choose>
<xsl:when test="@myValue != ''">
<xsl:text>My value: </xsl:text>
<xsl:value-of select="@myValue" />
<xsl:text></xsl:text> <!--NEW LINE-->
<xsl:text>My other value: </xsl:text>
<xsl:value-of select="@myOtherValue" />
</xsl:when>
</xsl:choose>
<xsl:variable>
<div>
<xsl:value-of select="$myVar"/>
</div>
我试图在“新行”(空的<xsl:text>节点)中放入的任何东西都不起作用(包括本页中大多数更简单的建议),更不用说HTML在那里不起作用的事实,所以最终我不得不将其分割为2个变量,在<xsl:variable>作用域之外调用它们,并在它们之间放置一个简单的<br/>,即:
<xsl:variable name="myVar1">
<xsl:choose>
<xsl:when test="@myValue != ''">
<xsl:text>My value: </xsl:text>
<xsl:value-of select="@myValue" />
</xsl:when>
</xsl:choose>
<xsl:variable>
<xsl:variable name="myVar2">
<xsl:choose>
<xsl:when test="@myValue != ''">
<xsl:text>My other value: </xsl:text>
<xsl:value-of select="@myOtherValue" />
</xsl:when>
</xsl:choose>
<xsl:variable>
<div>
<xsl:value-of select="$myVar1"/>
<br/>
<xsl:value-of select="$myVar2"/>
</div>
是的,我知道,这不是最复杂的解决方案,但它是有效的,只是分享我对xsl的挫折经验;)
我在这里添加了DOCTYPE指令:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY nl "
">
]>
<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;而不是
在输出中产生换行符。与其他解决方案一样,这通常放在<xsl:text>标记中。