如何在XML文档中允许DTD通过XSLT的文档(uri)函数加载XslCompiledTransform(.NET)

时间:2009-09-20 18:45:30

标签: .net xslt

document(uri)函数用于在XSLT中加载另一个文档时,目标文档包含DTD,我得到XslTransformException,其中包含内部XmlException

  

出于安全原因,此XML文档中禁止使用DTD。要启用DTD处理,请将XmlReaderSettings上的ProhibitDtd属性设置为false,并将设置传递给XmlReader.Create方法。

在XSLT实现中创建XmlReader时,没有直接的方法可以使用我想要的设置创建XmlReader,而XslCompiledTransformXmlResolver 1都没有或相关类似乎提供任何形式的钩子。

(我正在使用DTD设置一些HTML实体,以便更轻松地创作文档。)

1 基于在Reflector中查看XmlUrlResolver,这只是将URI的目标加载为流。

E.g。是XSLT包含

<xsl:apply-templates select="document('more.xml')/root"/>

more.xml包含DTD,然后上面的例外是结果。

1 个答案:

答案 0 :(得分:3)

传递给XmlResolver方法的Transform用于文档函数,此解析程序可以返回允许DTD的XmlReader,而不是返回Stream。您也可以返回IXPathNavigable。换句话说,您需要XmlResolver的专门实现来解决此问题。