Lorsque la fonction document(uri)
est utilisée pour charger un autre document dans le fichier XSLT, où le document cible contient une DTD, j'obtiens un XslTransformException
, contenant un code interne XmlException
:Comment autoriser la DTD en XML Documents chargés via la fonction document (uri) de XSLT avec XslCompiledTransform (.NET)
Pour des raisons de sécurité, la DTD est interdite dans ce document XML. Pour activer le traitement DTD, définissez la propriété ProhibitDtd sur XmlReaderSettings sur false et passez les paramètres dans la méthode XmlReader.Create.
Comme le XmlReader
est créé dans la mise en œuvre XSLT il n'y a aucun moyen direct de créer XmlReader avec les paramètres que je veux, et aucun des XslCompiledTransform
, XmlResolver
ou classes apparentées semblent fournir toute forme de crochet .
(j'utilise une DTD pour définir certaines entités HTML pour rendre la création du document plus facile.)
basé sur la recherche à XmlUrlResolver
dans le réflecteur ce juste chargé de la cible de l'URI en tant que flux.
E.g. est le XSLT contient
<xsl:apply-templates select="document('more.xml')/root"/>
et more.xml
contient une DTD alors l'exception ci-dessus est le résultat.
Merci, cela fonctionne. Temps pour certains commentaires sur la documentation qui omet complètement de mentionner que vous pouvez retourner quelque chose d'autre que Stream. – Richard
@Richard: http://blogs.msdn.com/xmlteam/articles/Introducing_XslCompiledTransform.aspx est la meilleure documentation sur XslCompiledTransform. –
Ils ont changé l'URL, voici le nouveau: http://blogs.msdn.com/b/xmlteam/archive/2005/11/16/introducing-xslcompiledtransform.aspx –