【问题标题】:HTML input to XSLT 2.0: what to do with &nbsp?XSLT 2.0 的 HTML 输入:如何处理 &nbsp?
【发布时间】:2015-08-13 13:31:37
【问题描述】:

关于使用 XSLT 保留 &nbsp、如何在 XSLT 中输出空格字符以及在 CDATA 输入中的 & 存在许多问题。这是一个不同的问题:我有包含 &nbsp 的 HTML 文件,我想将它们转换为 XML。我不知道如何使用 Saxon XSLT 2.0 处理器读取输入。这是一个文本挖掘应用程序,所以我无法控制输入。

这是输入中的示例文本:

<P STYLE="line-height:0px;margin-top:0px;margin-bottom:0px;border-> bottom:0.5pt solid #000000">
&nbsp;
</P> 

首先,我只想消除输出中的所有 &nbsp。一旦我能做到这一点,我将消除 STYLE 和其他 HTML 结构等属性。

问题是我根本无法让 Saxon 输入 HTML 文件。我收到此错误。

SXXP0003: Error reported by XML parser: The entity "nbsp" was referenced, but not declared.

这是我的测试 XSL 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns="http://www.w3.org/1999/html"
        version="2.0">
  <xsl:output method="xml" omit-xml-declaration="yes" encoding="utf-8"/>
  <xsl:strip-space elements="*"/>
  <!-- copy all elements and their attributes-->
  <xsl:template match="* | @*">
    <xsl:copy><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:copy>
  </xsl:template>
</xsl:stylesheet>

我现在只是在学习 XSLT,所以有些结构我并不完全理解。我认为 DOCTYPE 声明允许在 XSL 文件中使用 &nbsp,而不是在输入文件中。我尝试将 DOCTYPE 声明更改为

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

那没有效果。我也删除了

xmlns="http://www.w3.org/1999/html"

来自 xsl:stylesheet 声明,它并没有解决问题。

显然,我不是唯一遇到此问题的人。我敢肯定有一个简单的解决方法,我只是没能找到它。它让我无法做真正的工作,所以我发现自己非常沮丧。任何帮助将不胜感激。

【问题讨论】:

  • 如果在输入文件中添加 会起作用吗? XSLT 不适用于输入 HTML。它必须是 XML。我也会尝试将 添加到您的输入 XML 中。
  • 您是从 Java 代码调用 Saxon 还是使用命令行转换器工具?您能否根据需要显示您的代码或您正在使用的命令行选项?

标签: html xml xslt


【解决方案1】:

使用 saxon:parse-html() 扩展函数读取 HTML 并将其呈现为标准 XDM 树。

或者,如果您想使用 Saxon-HE 而不是 -PE 或 -EE,请创建一个 SAXSource 来读取您的输入,其中 XMLReader 是 HTML 解析器,例如 TagSoup 或 validator.nu。

【讨论】:

    【解决方案2】:

    如果你想解析 HTML 而不是 XML,那么你必须确保你有一个可用的 HTML 解析器,并告诉 Saxon 使用它而不是 XML 解析器。因此,请下载 TagSoup (http://home.ccil.org/~cowan/tagsoup/) 或 HTML5 解析器 (https://about.validator.nu/htmlparser/)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-31
      • 2011-04-21
      • 1970-01-01
      • 2010-10-05
      • 2016-08-23
      • 1970-01-01
      • 2011-03-13
      • 2016-11-27
      相关资源
      最近更新 更多