2008-10-27 4 views

Répondre

0

Voir http://todotnet.com/archive/2006/07/27/8248.aspx

Parce que dans la construction de XPathDocument, il y a une http GET commande pour voir si elle peut accéder à la DTD . Il ne fait rien avec le DTD. C'est pour juste au cas où. Ainsi, alors que XPathDocument est initialement configuré pour être une alternative plus rapide à XmlDocument, vous aurez le surcharge supplémentaire d'une requête http qui doit être résolue. Imaginez ce serveur étant de l'autre côté de le globe!

1

Vous pouvez écrire un XmlUrlResolver personnalisé, puis ignorer la DTD distante . Aussi, je crois que vous pouvez définir l'utilisation de XmlResolver = null sur XmlTextReader.

+0

Mais le MSDN devrait clairement indiquer cela pourrait se produire. En regardant le XPathDocument, vous ne pouvez pas dire qu'il cherchera DTD sur le web. Aussi, pourquoi l'exception est-elle levée? Si la DTD n'est pas nécessaire - fonctionne hors connexion n'est-ce pas? Merci pour les suggestions de toute façon - je vais les essayer la prochaine fois! – Goran

1

pour les personnes intéressées que j'ai trouvé une solution de contournement pour désactiver la vérification dtd

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.XmlResolver = null; 
settings.ProhibitDtd = false; 

var xmlReader = XmlTextReader.Create(new StringReader(xmlString),settings); 
XPathDocument xpathDoc = new XPathDocument(xmlReader); 
Questions connexes