【问题标题】:Java: XSLT with output HTML but without HTML entitiesJava:具有输出 HTML 但没有 HTML 实体的 XSLT
【发布时间】:2014-04-03 11:14:40
【问题描述】:

是否可以将 XSL 转换 mit xsl:output 方法设置为 HTML,但在输出中不使用 HTML 实体?输出应该使用数字实体或根本不使用实体(因为我使用的是 UTF-8 实体,所以不需要)。

【问题讨论】:

  • 你为什么在乎?只要输出是格式良好的 HTML,细节就无关紧要。
  • 我必须在没有理解 HTML 实体的情况下进一步处理结果。由于不支持自闭合标签,因此无法输出为 XML。我无法更改处理代码。
  • 这就是你的问题。不要将 HTML 提供给不理解 HTML 的组件。更改该组件以使用 HTML 解析器,或者如果这不可能,则创建一个相应地预处理 HTML 的新组件。你目前的做法并不...明智,你应该花时间尝试做正确的事情,而不是尝试正确地做错误的事情。
  • 这总是取决于所需的时间。如果禁用 html 实体是一个简单的设置,大约需要 1 分钟的工作时间,那么重写需要几天时间的组件是不明智的。不过还是感谢您的回复。我已经认为这不会是一个简单的设置。
  • 如果您想输出纯文本,请改为这样做。文本中没有字符实体。那种 HTML 但不是 HTML 的东西是徒劳的。

标签: java html xslt entities


【解决方案1】:

您可以使用disable-output-escaping。使用此输入:

<test>Café</test>

使用此 XSL 样式表:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" encoding="UTF-8"/>
    <xsl:template match="test">
        <xsl:copy>
            <xsl:value-of select="."/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

将呈现:

<test>Caf&eacute;</test>

但是如果你把disable-output-escaping="yes" 加到&lt;xsl:value-of&gt;:

<xsl:value-of select="." disable-output-escaping="yes"/>

你得到:

<test>Café</test>

如果您使用默认情况下不转义 HTML 的转换器(例如 Saxon 9),您也可能会得到未转义的 HTML。我也相信您可以将 Xalan 配置为默认情况下不转义 HTML 实体。

您可以尝试使用默认禁用输出转义的其他转换器。

【讨论】:

  • 谢谢。这也有助于输出非拉丁字符,例如德语文本原样,节省了相当多的带宽。
猜你喜欢
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2022-01-19
  • 2015-01-07
  • 1970-01-01
  • 2012-05-31
相关资源
最近更新 更多