【发布时间】:2015-08-13 13:31:37
【问题描述】:
关于使用 XSLT 保留  、如何在 XSLT 中输出空格字符以及在 CDATA 输入中的 & 存在许多问题。这是一个不同的问题:我有包含   的 HTML 文件,我想将它们转换为 XML。我不知道如何使用 Saxon XSLT 2.0 处理器读取输入。这是一个文本挖掘应用程序,所以我无法控制输入。
这是输入中的示例文本:
<P STYLE="line-height:0px;margin-top:0px;margin-bottom:0px;border-> bottom:0.5pt solid #000000">
</P>
首先,我只想消除输出中的所有  。一旦我能做到这一点,我将消除 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 " "> ]>
<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 文件中使用  ,而不是在输入文件中。我尝试将 DOCTYPE 声明更改为
<!DOCTYPE xsl:stylesheet [ <!ENTITY html " "> ]>
那没有效果。我也删除了
xmlns="http://www.w3.org/1999/html"
来自 xsl:stylesheet 声明,它并没有解决问题。
显然,我不是唯一遇到此问题的人。我敢肯定有一个简单的解决方法,我只是没能找到它。它让我无法做真正的工作,所以我发现自己非常沮丧。任何帮助将不胜感激。
【问题讨论】:
-
如果在输入文件中添加 会起作用吗? XSLT 不适用于输入 HTML。它必须是 XML。我也会尝试将 添加到您的输入 XML 中。
-
您是从 Java 代码调用 Saxon 还是使用命令行转换器工具?您能否根据需要显示您的代码或您正在使用的命令行选项?