使用了元素 'xsl:stylesheet' 但未在 DTD/Schema 中声明

The element 'xsl:stylesheet' is used but not declared in the DTD/Schema

我正在尝试使用来自 RenderX 的“fo2html.xsl”文件将 XSL-FO 文档转换为 HTML。这是这个 Whosebug post 的建议: Converting XSL-FO to HTML

我正在使用 load() 方法,它适用于加载“fo2html.xsl”文件之前的所有内容。

            hr = pXMLDoc->load(vSource, &vbResult);

IXMLDOMParseError 对象告诉我问题出在 XML 的第 24 行。

<!DOCTYPE xsl:stylesheet [
  <!ENTITY anchor "<xsl:apply-templates select='@id' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'/>">
  <!ENTITY add-style "<xsl:call-template name='add-style-attribute' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'/>">
]>

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                exclude-result-prefixes="fo">

第24行是上面XML的最后一行。错误源返回exclude-result-prefixes="fo">,原因是:

The element 'xsl:stylesheet' is used but not declared in the DTD/Schema

我试过 pDoc2->put_resolveExternals(VARIANT_TRUE);pDoc2->setProperty(L"ProhibitDTD", v);,但都没有任何改变。

使用 MSXML 加载“fo2html.xsl”需要做什么?

谢谢!

您可以尝试添加一个 XML 声明(参见 https://www.w3.org/TR/REC-xml/#sec-prolog-dtd),表明文档是独立的:

<?xml version="1.0" standalone="yes" ?>

或者,您可能需要自己扩展实体并删除 DOCTYPE 声明,这样文件中就没有架构了。