2009-09-20 44 views
2

當使用document(uri)函數在XSLT中加載另一個文檔,其中目標文檔包含DTD時,我得到一個XslTransformException,包含內部XmlException如何在XML中允許DTD使用XslCompiledTransform(.NET)通過XSLT的文檔(uri)函數加載的文檔

出於安全原因,此XML文檔中禁止使用DTD。要啓用DTD處理,請將XmlReaderSettings上的ProhibitDtd屬性設置爲false,並將設置傳遞給XmlReader.Create方法。

由於XmlReader是XSLT實現沒有直接的方法來創建與我想設置的XmlReader中,並沒有XslCompiledTransform內創建,XmlResolver 或相關類似乎提供任何形式的掛鉤。

(我使用DTD設置一些HTML實體,以使文檔更容易的創作。)的基礎上看着XmlUrlResolver

在反射板的剛剛加載的URI的目標的一個流。

E.g.是XSLT包含

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

more.xml包含DTD然後上述例外是結果。

回答

3

你傳遞給Transform方法相同的XmlResolver用於文件的功能,該解析器可以返回一個XmlReader,允許DTD,而不是返回Stream。您也可以返回IXPathNavigable。換句話說,你需要專門的實現XmlResolver來解決這個問題。

+0

謝謝,這個工程。對完全無法提及您的文檔提出一些反饋的時間可以返回Stream以外的其他內容。 – Richard 2010-04-06 11:20:28

+0

@Richard:http://blogs.msdn.com/xmlteam/articles/Introducing_XslCompiledTransform.aspx是XslCompiledTransform上最好的文檔。 – 2010-04-06 15:32:31

+0

他們更改了URL,這是新的URL:http://blogs.msdn.com/b/xmlteam/archive/2005/11/16/introducing-xslcompiledtransform.aspx – 2010-10-14 14:26:49