2025-03-08 09:00:04

在XSLT中生成新行

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


当前回答

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

其他回答

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

参见示例

<xsl:variable name="module-info">
  <xsl:value-of select="@name" /> = <xsl:value-of select="@rev" />
  <xsl:text>&#10;</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代码将产生换行符(换行符):

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

对于回车,使用:

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

根据我的经验,我注意到在<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的挫折经验;)

我赞同尼克·吉布森的方法,这是 我最喜欢的是:

<xsl:variable name='nl'><xsl:text>
</xsl:text></xsl:variable>

然而,我一直在使用Ant任务<echoxml>到 创建样式表并针对文件运行它们。的 task将做属性值模板,例如${DSTAMP}, 但它也会重新格式化xml,所以 在这种情况下,最好使用实体引用。

<xsl:variable name='nl'><xsl:text>&#xa;</xsl:text></xsl:variable>

我在这里添加了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>标记中。