Когда функция document(uri)
используется для загрузки другого документа в XSLT, где целевой документ содержит DTD, я получаю XslTransformException
, содержащий внутренний XmlException
:
В целях безопасности DTD запрещен в этом документе XML. Чтобы включить обработку DTD, установите для свойства ProhibitDtd в XmlReaderSettings значение false и передайте параметры в метод XmlReader.Create.
Поскольку XmlReader
создается в реализации XSLT, прямого способа создания XmlReader с нужными настройками нет, и ни один из XslCompiledTransform
, XmlResolver
1 или связанных классов кажется, предоставляют любую форму крючка.
(Я использую DTD для настройки некоторых сущностей HTML, чтобы упростить создание документа.)
1 на основе просмотра XmlUrlResolver
в Reflector, это просто загрузило цель URI в виде потока.
например. XSLT содержит
<xsl:apply-templates select="document('more.xml')/root"/>
и more.xml
содержат DTD, тогда исключение, приведенное выше, является результатом.