当document(uri)
函数用于在XSLT中加载另一个文档时,目标文档包含DTD,我得到XslTransformException
,其中包含内部XmlException
:
出于安全原因,此XML文档中禁止使用DTD。要启用DTD处理,请将XmlReaderSettings上的ProhibitDtd属性设置为false,并将设置传递给XmlReader.Create方法。
在XSLT实现中创建XmlReader
时,没有直接的方法可以使用我想要的设置创建XmlReader,而XslCompiledTransform
,XmlResolver
1都没有或相关类似乎提供任何形式的钩子。
(我正在使用DTD设置一些HTML实体,以便更轻松地创作文档。)
1 基于在Reflector中查看XmlUrlResolver
,这只是将URI的目标加载为流。
E.g。是XSLT包含
<xsl:apply-templates select="document('more.xml')/root"/>
和more.xml
包含DTD,然后上面的例外是结果。
答案 0 :(得分:3)
传递给XmlResolver
方法的Transform
用于文档函数,此解析程序可以返回允许DTD的XmlReader
,而不是返回Stream
。您也可以返回IXPathNavigable
。换句话说,您需要XmlResolver
的专门实现来解决此问题。