代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

如何在XSLT中插入

  •  193
  • JL. Hans Passant  · 技术社区  · 15 年前

    我怎样插入

     

    在一个XSLT样式表中,我一直得到这个错误:

    XML分析错误:未定义实体

    本质上,我希望在XSLT模板中有一个不间断的空格字符。

    11 回复  |  直到 6 年前
        1
  •  317
  •   brabster    6 年前

    使用实体代码   相反。

      是HTML“字符实体引用”。XML中没有用于不间断空格的命名实体,因此使用代码 &#160个; .

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

        2
  •  30
  •   Saroj    11 年前

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

    <xsl:text> </xsl:text>
    
        3
  •  24
  •   WaterSoul    13 年前

    也可以这样做:

    <xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>
    
        4
  •  20
  •   honk    9 年前

    用这个

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

    编辑:投反对票的人应该首先确认这是可行的(确实如此,而且是解决这个问题的最普遍的方法。)

        5
  •  12
  •   victor hugo    15 年前

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

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

    还可以添加更多实体,如ntilde、aacute等。

        6
  •  5
  •   Community GrandMarquis    7 年前

    除了 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 ... 将始终产生与您的 xsl:output 设置。

    当包含所有字符引用时,最好使用本地实体解析器来防止XSLT引擎从Internet获取字符实体定义。JAXP或显式xalan-j用户可能需要xalan-j的补丁来正确使用解析器。看我的部落格 XSLT, entities, Java, Xalan... 用于补丁下载和评论。

        7
  •  2
  •   Abel    9 年前

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

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

        8
  •  2
  •   Adil    8 年前

    XSLT 样式表必须是格式良好的XML。自从 "&nbsp;" 不是其中之一 the five predefined XML entities 不能直接包含在样式表中。 所以回到你的解决方案上来 "&#160;" 是一个完美的替代品 “&” 你应该使用。

    例子:

    <xsl:value-of select="$txtFName"/>&#160;<xsl:value-of select="$txtLName"/>
    
        9
  •  0
  •   Mattia Vio    10 年前

    您还可以使用:

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

    记住&后的amp;否则将收到错误消息

        10
  •  0
  •   Viacheslav    6 年前

    尝试使用

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

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

        11
  •  -1
  •   B H    9 年前

    我试图在HTML表中的空单元格上显示边框。我在空单元格中使用不间断空间的老把戏不是从XSLT开始的。我用了同样效果的换行符。我提到这个,只是为了防止您试图使用非中断空格的原因是为了打开单元格边框而给“空”表单元格提供一些内容。

    <br/>