2009-09-20 5 views
2

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.

Répondre

3

Le même XmlResolver vous passez à la méthode Transform est utilisée pour la fonction de documents, ce résolveur peut retourner un XmlReader qui permet DTD, au lieu de retourner Stream. Vous pouvez également renvoyer IXPathNavigable. En d'autres termes, vous avez besoin d'une implémentation spécialisée de XmlResolver pour résoudre ce problème.

+0

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

+0

@Richard: http://blogs.msdn.com/xmlteam/articles/Introducing_XslCompiledTransform.aspx est la meilleure documentation sur XslCompiledTransform. –

+0

Ils ont changé l'URL, voici le nouveau: http://blogs.msdn.com/b/xmlteam/archive/2005/11/16/introducing-xslcompiledtransform.aspx –

Questions connexes