如何插入  在XSLT中

JL.*_*JL. 203 xslt

我怎么插入

 

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

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

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

bra*_*ter 329

请改用实体代码 .

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

维基百科包括XML和HTML实体的名单,你可以看到有在XML仅5"预定义的实体",但HTML已经超过200我还会点到创建一个空间( )在XSL其中有优秀的答案.

  • 我们最近遇到了一种情况,其中只有一种XSL停止使用这种技术,并开始显示一个奇怪的角色.但是,如果我使用WaterSoul的CDATA技术,它可以工作. (3认同)

小智 36

&#160;工作得很好.但是,它将以ANSI编码显示其中一个奇怪的字符.<xsl:text>最适合我.

<xsl:text> </xsl:text>
Run Code Online (Sandbox Code Playgroud)

  • 使用接受的答案,我在XML输出中找到了一个换行符(至少在VS2010的XML编辑器中看起来像这样).使用这个答案我只得到1个空格. (3认同)

小智 25

人们也可以这样做:

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>
Run Code Online (Sandbox Code Playgroud)

  • 这将起作用*如果处理器支持`disable-output-escaping`*,它不是必需的,并且在XSLT 2.0中已弃用,在3.0中更多.在这些版本中,使用`xsl:character-map`可以达到相同的效果,保证可以使用跨处理器.此外,这会在输出中放置一个命名实体`&nbsp;`,*不一定与非破坏空格*相同,并且接收端*必须将此实体声明为*(在HTML中它通常是隐式的). (2认同)

jag*_*eep 21

用这个

<xsl:text disable-output-escaping="yes">&amp;</xsl:text>nbsp;
Run Code Online (Sandbox Code Playgroud)

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

  • 我也是downvoted,因为你不能保证接收端会宣布&nbsp;.如果您正在使用xslt + html,那么是的,这是一种方法,尽管是黑客攻击.但是,如果你正在使用xslt生成其他xml,那么它只会炸毁你. (8认同)
  • 从来没有说过 (2认同)
  • 此外,根据链接页面,所接受的答案对所有解析器都无效; 只是一个抬头 (2认同)

vic*_*ugo 14

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

<!DOCTYPE stylesheet [
<!ENTITY nbsp  "&#160;" >
]>
Run Code Online (Sandbox Code Playgroud)

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


Ser*_*kov 5

除了victor hugo的答案之外,还可以在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>
Run Code Online (Sandbox Code Playgroud)

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

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