XSLT:HTML5转换为源文档失败

时间:2014-07-08 11:52:46

标签: html5 xslt

我从XML创建HTML5没有问题。

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

比如这个源HTML5 doc:

<!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更易于转换的内容。但这是一项复杂的任务,我宁愿避免。

1 个答案:

答案 0 :(得分:0)

我无法解决问题,正如我在原始问题中所提出的那样。我找不到使用<!DOCTYPE html SYSTEM "about:legacy-compat"> doctype转换文件的方法。

我确实找到了一个不同方向的解决方案。我将源文件更改为<!DOCTYPE html>,这些源文件可以由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。

更新在许多用例上工作一段时间后,上述<output>引发了Description: XTSE1560: Conflicting values for output property method错误。我通过将methodxhtml更改为xml来解决此问题。