我从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更易于转换的内容。但这是一项复杂的任务,我宁愿避免。
答案 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
错误。我通过将method
从xhtml
更改为xml
来解决此问题。