如何在XSLT中插入

时间:2009-09-22 18:05:27

标签: xslt

如何插入

  

 

在XSLT样式表中,我不断收到此错误:

  

XML解析错误:未定义的实体

基本上我想在XSLT模板中使用非空格字符。

12 个答案:

答案 0 :(得分:323)

请改为使用实体代码 

 是HTML“字符实体引用”。 XML中没有非破坏空间的命名实体,因此您使用代码 

Wikipedia includes a list of XML and HTML entities,您可以看到XML中只有5个“预定义实体”,但HTML已超过200个。我还会指向Creating a space ( ) in XSL,它有很好的答案。

答案 1 :(得分:31)

&#160;效果很好。但是,它将以ANSI编码显示其中一个奇怪的字符。 <xsl:text>对我来说效果最好。

<xsl:text> </xsl:text>

答案 2 :(得分:24)

也可以这样做:

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>

答案 3 :(得分:20)

使用此

<xsl:text disable-output-escaping="yes">&amp;</xsl:text>nbsp;

编辑:Downvoters应该首先验证这是否有效(确实如此,并且是解决问题的最常用方法。)

答案 4 :(得分:13)

您可能希望在文件开头添加此实体的定义(在xml声明下方):

<!DOCTYPE stylesheet [
<!ENTITY nbsp  "&#160;" >
]>

您还可以添加更多实体,例如Ntilde,Aacute等。

答案 5 :(得分:5)

除了victor hugo's answer之外,还可以在XSLT文件中使所有已知的字符引用合法化,如下所示:

<!DOCTYPE stylesheet [
  <!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
      "http://www.w3.org/2003/entities/2007/w3centities-f.ent">
  %w3centities-f;
]>
...
<xsl:text>&amp; &nbsp; &ndash;</xsl:text>

<xsl:text disable-output-escaping="yes">相比,这种方法的结果也存在一定的差异。后者将为所有类型的输出生成类似&nbsp;的字符串文字,即使对于<xsl:output method="text">也是如此,这可能恰好与您希望的不同...相反,获取实体定义对于通过<!DOCTYPE ... <!ENTITY ...的XSLT模板,始终会生成与xsl:output设置一致的输出。

当包含所有字符引用时,使用本地实体解析器来保持XSLT引擎不从Internet获取字符实体定义可能是明智的。 JAXP或显式Xalan-J用户可能需要Xalan-J的补丁才能正确使用解析器。有关修补程序下载和评论,请参阅我的博客XSLT, entities, Java, Xalan...

答案 6 :(得分:2)

当您使用以下内容(没有disable-output-escaping!)时,您将获得一个不间断的空间:

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

答案 7 :(得分:2)

XSLT样式表必须是格式良好的XML。由于"&nbsp;"不是the five predefined XML entities中的一个,因此无法直接将其包含在样式表中。 因此,回到您的解决方案"&#160;"是您应该使用的"&nbsp;"的完美替代。

示例:

<xsl:value-of select="$txtFName"/>&#160;<xsl:value-of select="$txtLName"/>

答案 8 :(得分:0)

你也可以使用:

<xsl:value-of select="'&amp;nbsp'"/>

记住&amp;后面的放大器或者你会收到一条错误信息

答案 9 :(得分:0)

尝试使用

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

但它取决于您使用的XSLT处理器:XSLT规范不要求XSLT处理器将其转换为“&nbsp;”。

答案 10 :(得分:0)

尽管@brabster和其他人已经提供了答案。
我认为更可重用的解决方案是:

<xsl:variable name="space">&#160;</xsl:variable>
...
<xsl:value-of select="$space"/>

答案 11 :(得分:-1)

我试图在HTML表格中的空单元格上显示边框。我在空单元格中使用不间断空格的旧技巧不适用于xslt。我使用了具有相同效果的换行符。我提到这一点,以防你试图使用不间断空格的原因是为了打开单元格边框,为“空”表格单元格提供一些内容。

<br/>