我怎么插入
 
在XSLT样式表中,我不断收到此错误:
XML解析错误:未定义的实体
基本上我想在XSLT模板中使用非破坏空格字符 .
你也可以用:
<xsl:value-of select="'&nbsp'"/>
在&之后记住放大器,否则您将收到错误消息
用这个
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
编辑:Downvoters应该首先验证这是否有效(确实如此,并且是问题的最常见解决方案 . )
人们也可以这样做:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
  效果很好 . 但是,它将以ANSI编码显示其中一个奇怪的字符 . <xsl:text> 对我来说效果最好 .
 
<xsl:text>
<xsl:text> </xsl:text>
请改用实体代码   .
是一个HTML "character entity reference" . XML中没有非破坏空间的命名实体,因此您使用代码   .
Wikipedia includes a list of XML and HTML entities,你可以看到XML中只有5个"predefined entities",但HTML有200多个 . 我还会指向Creating a space ( ) in XSL,它有很好的答案 .
当您使用以下(没有 disable-output-escaping !)时,您将获得一个不间断的空间:
disable-output-escaping
<xsl:text> </xsl:text>
XSLT stylesheets必须是格式良好的XML . 由于 " " 不是the five predefined XML entities之一,因此无法直接包含在样式表中 . 所以回到你的解决方案 " " 是你应该使用 " " 的完美替代品 .
" "
" "
例:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>
您可能希望在文件的开头添加此实体的定义(在xml声明下面):
<!DOCTYPE stylesheet [ <!ENTITY nbsp " " > ]>
您还可以添加更多实体,例如Ntilde,Aacute等 .
我试图在HTML表格中的空单元格上显示边框 . 我在空单元格中使用不间断空格的旧技巧不适用于xslt . 我使用了相同效果的换行符 . 我提到这一点,以防你试图使用不间断空间的原因是为了打开单元格边框而给“空”表格单元格提供一些内容 .
尝试使用
但它取决于您使用的XSLT处理器:XSLT规范不要求XSLT处理器将其转换为“ ” .
除了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>& –</xsl:text>
与 <xsl:text disable-output-escaping="yes"> 相比,这种方法的结果也存在一定的差异 . 后者将为所有类型的输出生成字符串文字,如 ,即使对于 <xsl:output method="text"> ,这可能恰好与您希望的不同...相反,通过 <!DOCTYPE ... <!ENTITY ... 获取为XSLT模板定义的实体将始终生成输出与 xsl:output 设置一致 .
<xsl:text disable-output-escaping="yes">
<xsl:output method="text">
<!DOCTYPE ... <!ENTITY ...
xsl:output
当包含所有字符引用时,使用本地实体解析器来保持XSLT引擎不从Internet获取字符实体定义可能是明智的 . JAXP或显式Xalan-J用户可能需要Xalan-J的补丁才能正确使用解析器 . 有关补丁下载和评论,请参阅我的博客XSLT, entities, Java, Xalan... .
11 回答
你也可以用:
在&之后记住放大器,否则您将收到错误消息
用这个
编辑:Downvoters应该首先验证这是否有效(确实如此,并且是问题的最常见解决方案 . )
人们也可以这样做:
 
效果很好 . 但是,它将以ANSI编码显示其中一个奇怪的字符 .<xsl:text>
对我来说效果最好 .请改用实体代码
 
.
是一个HTML "character entity reference" . XML中没有非破坏空间的命名实体,因此您使用代码 
.Wikipedia includes a list of XML and HTML entities,你可以看到XML中只有5个"predefined entities",但HTML有200多个 . 我还会指向Creating a space ( ) in XSL,它有很好的答案 .
当您使用以下(没有
disable-output-escaping
!)时,您将获得一个不间断的空间:<xsl:text> </xsl:text>
XSLT stylesheets必须是格式良好的XML . 由于
" "
不是the five predefined XML entities之一,因此无法直接包含在样式表中 . 所以回到你的解决方案" "
是你应该使用" "
的完美替代品 .例:
您可能希望在文件的开头添加此实体的定义(在xml声明下面):
您还可以添加更多实体,例如Ntilde,Aacute等 .
我试图在HTML表格中的空单元格上显示边框 . 我在空单元格中使用不间断空格的旧技巧不适用于xslt . 我使用了相同效果的换行符 . 我提到这一点,以防你试图使用不间断空间的原因是为了打开单元格边框而给“空”表格单元格提供一些内容 .
尝试使用
但它取决于您使用的XSLT处理器:XSLT规范不要求XSLT处理器将其转换为“
” .除了victor hugo's answer之外,还可以在XSLT文件中使所有已知的字符引用合法,如下所示:
与
<xsl:text disable-output-escaping="yes">
相比,这种方法的结果也存在一定的差异 . 后者将为所有类型的输出生成字符串文字,如
,即使对于<xsl:output method="text">
,这可能恰好与您希望的不同...相反,通过<!DOCTYPE ... <!ENTITY ...
获取为XSLT模板定义的实体将始终生成输出与xsl:output
设置一致 .当包含所有字符引用时,使用本地实体解析器来保持XSLT引擎不从Internet获取字符实体定义可能是明智的 . JAXP或显式Xalan-J用户可能需要Xalan-J的补丁才能正确使用解析器 . 有关补丁下载和评论,请参阅我的博客XSLT, entities, Java, Xalan... .