【问题标题】:XSLT: Transform of HTML5 as source document failsXSLT:将 HTML5 转换为源文档失败
【发布时间】:2014-07-08 11:52:45
【问题描述】:

我从 XML 创建 HTML5 没有问题。

另一方面,我无法将 HTML5 转换为 HTML5。

比如这个源HTML5文档:

<!DOCTYPE html SYSTEM "about:legacy-compat">
<html>
    <head>
        <meta content="text/html; charset=UTF-8"/>
        <title>Title</title>
    </head>
    <body>
        <p>foo</p>
    </body>
</html>

还有这个 xslt:

<xsl:stylesheet
    version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs">

    <xsl:output
        method="html" 
        doctype-system="about:legacy-compat"
        encoding="UTF-8"
        indent="yes" />

    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

出现此错误:

未知协议:关于

(我使用的是 Saxon PE,但认为实际的处理器在这里无关紧要)

是否有 HTML5 源文件的 xmlns 条目?

我看到了这个相关的How to use the about: protocol of HTML5 in XSLT processors,但是看起来有点hackish,我也无法适用于我的情况。

更新:仍在解决这个问题。到目前为止,我发现,我错误地认为 HTML5 是可转换的有效 XML。 HTML5 显然不是有效的 XML。如果我想要可转换的 HTML5,我需要一个 XHTML5 的源文档(我不知道它存在)。使问题进一步复杂化的是,XHTML5 似乎是一个使用受限的年轻标准。我在这里找到了一个很好的讨论xhtml5 output

所以,我仍在寻找最初在 Q 中所述的解决方案。但是,如果这不可能,我的后备选项是将源文档更改为更可通过 xslt 转换的内容。但这将是一项我宁愿避免的复杂任务。

【问题讨论】:

  • "(我使用的是 Saxon PE,但认为这里的实际处理器无关紧要)" 它可能是相关的,因为 libxslt 处理以上就好了。
  • Michael.. 感谢 libxslt 的尝试。很高兴知道它在那里工作,我会注意到未来的 HTML5 转换。我很遗憾这里没有 libxslt 选项——我需要 xslt 2.0 功能(我从上面的简化演示中删除了 2.0 模板)。

标签: html xslt


【解决方案1】:

我无法解决我在原始问题中提出的问题。我找不到使用&lt;!DOCTYPE html SYSTEM "about:legacy-compat"&gt; doctype 转换文件的方法。

我确实找到了不同方向的解决方案。我将源文件更改为&lt;!DOCTYPE html&gt;,这些源文件可由 Saxon 转换(由于 xslt 2.0 的需要,我使用它)。生成的文件得到了很好的验证,并且可以毫无问题地运行 Twitter/Bootstrap。

我从源文档的制作中删除了这个:

<xsl:output
    method="html" 
    doctype-system="about:legacy-compat"
    encoding="UTF-8"
    indent="yes" />

并将其替换为:

<xsl:output
    method="xhtml"
    html-version="5.0"
    omit-xml-declaration="yes"
    encoding="UTF-8"
    indent="yes" />

后一个“输出”创建可转换的 HTML5。我想它会被称为 xhtml5。

更新 在处理许多用例一段时间后,上述&lt;output&gt; 引发了Description: XTSE1560: Conflicting values for output property method 错误。我通过将 methodxhtml 更改为 xml 来解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2011-04-30
    • 1970-01-01
    • 2020-06-13
    • 2015-10-29
    • 1970-01-01
    • 2017-07-14
    相关资源
    最近更新 更多