【问题标题】:Using an HTML entity in XSLT (e.g.  )在 XSLT 中使用 HTML 实体(例如 )
【发布时间】:2010-09-07 02:35:45
【问题描述】:

在 XSLT 中包含 html 实体的最佳方式是什么?

<xsl:template match="/a/node">
    <xsl:value-of select="."/>
    <xsl:text>&nbsp;</xsl:text>
</xsl:template>

这个返回一个 XsltParseError

【问题讨论】:

    标签: xslt


    【解决方案1】:

    您可以使用 CDATA 部分

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

    或者您可以在本地 DTD 中描述 &nbsp:

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

    或者只使用&amp;#160; 而不是&amp;nbsp;

    【讨论】:

      【解决方案2】:

      这个返回一个 XsltParseError

      是的,原因是&amp;nbsp; 不是 XML 或 XSLT 中的预定义实体,因为它在 HTML 中。

      你可以只使用&amp;nbsp;代表的unicode字符:&amp;#160;

      【讨论】:

        【解决方案3】:

        在 xslt 中使用 html 实体的另一种可能性是:

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

        【讨论】:

        • Unicode 字符   给出了问号和方框,输出未转义的 html 实体对我有用,谢谢。
        【解决方案4】:

        XSLT 默认只处理五个基本实体:ltgtaposquotamp。所有其他人都需要定义为@Aku提及。

        【讨论】:

          【解决方案5】:

          现在有了 Unicode,使用命名字符实体通常会适得其反。出于这个原因,我建议将 Unicode 字符用于不间断空格而不是实体。或者,您可以使用实体&amp;#160;,而不是命名实体。使用命名实体会使您的 XML 依赖于内联或外部 DTD。

          【讨论】:

            【解决方案6】:

            文本标签之间有一个空格字符就足够了。

            【讨论】:

              【解决方案7】:

              还可以从aku's answer 的第二部分扩展该方法并获取所有可用的已知字符引用,如下所示:

              <!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>&nbsp;&minus;30&deg;</xsl:text>
              

              &lt;xsl:text disable-output-escaping="yes"&gt; 方法相比,结果存在一定差异。后者将为各种输出生成字符串文字,例如&amp;nbsp;,甚至是&lt;xsl:output method="text"&gt;,这可能与您可能希望的不同......相反,获取为XSLT模板定义的实体通过&lt;!DOCTYPE ... &lt;!ENTITY ... 将始终产生与您的xsl:output 设置一致的输出。

              使用本地实体解析器来阻止 XSLT 引擎从 Internet 获取字符实体定义可能是明智之举。 JAXP 或明确的 Xalan-J 用户可能需要 Xalan-J 的补丁才能正确使用解析器。有关补丁下载和 cmets,请参阅我的博客 XSLT, entities, Java, Xalan...

              【讨论】:

              • 这很漂亮-希望它更广为人知
              【解决方案8】:

              感谢您的信息。当我在 Dynamicweb CMS 的模板中进行 XSLT 转换时,我根据对我有用的方法写了一篇简短的博客文章。

              博文在此:How to add entities to XSLT templates

              /Sten Hougaard

              【讨论】:

                【解决方案9】:

                我发现所有这些解决方案都在空白处产生了一个字符。

                使用&lt;xsl:text&gt; &lt;/xsl:text&gt; 为我解决了问题;但&lt;xsl:text&gt;#x20;&lt;/xsl:text&gt; 也可以。

                【讨论】:

                  【解决方案10】:

                  必须使用实体#x160;

                  【讨论】:

                  • 不是 x160,而是十进制的160。
                  【解决方案11】:

                  我对 Aku 的 DOCTYPE 方法不满意。

                  在 Windows 2003 服务器上的 MSXML 转换中对我有用的是

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

                  上面的混合体。感谢 Stackoverflow 的贡献者!

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-11-30
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-03-07
                    • 2012-09-27
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多