2010-10-28 19 views
11

Je veux charger un XmlNode sans obtenir un XmlException lorsqu'un espace de noms non reconnu est présent.Comment charger un objet XmlNode en ignorant les espaces de noms non déclarés?

La raison en est que j'ai besoin de passer une instance XMLNode à une méthode. Je charge des fragments XML arbitraires ayant des espaces de noms hors de leur contexte d'origine (par exemple le formatage MSWord et d'autres produits logiciels avec divers schémas qui "polluent" le contenu avec leurs préfixes d'espace de noms). Les espaces de noms ne sont pas importants pour moi ou pour la méthode cible à laquelle elle est transmise. (Ceci est parce que la méthode cible utilise comme HTML pour le rendu et les espaces de noms seront ignorés ou supprimés naturellement.)

Exemple
est ici un fragment d'exemple, je suis en train de faire un XMLNode sur:

<p> 
<div> 
    <st1:country-region w:st="on"> 
    <st1:place w:st="on">Canada</st1:place> 
    </st1:country-region> 
    <hr /> 
    <img src="xxy.jpg" /> 
</div> 
</p> 

Lorsque je tente de le charger dans une instance XmlDocument (c'est ma tentative d'obtenir un XmlNode) Je reçois l'exception XML suivant:

« st1 » est un nom non déclarés rythme. Ligne 3, position 251.

Comment puis-je obtenir une instance XmlNode à partir de ce type de fragment XML?

Répondre

29

XmlTextReader possède une propriété Namespaces vous pouvez désactiver:

XmlDocument GetXmlDocumentFromString(string xml) { 
    var doc = new XmlDocument(); 

    using (var sr = new StringReader(xml)) 
    using (var xtr = new XmlTextReader(sr) { Namespaces = false }) 
     doc.Load(xtr); 

    return doc; 
} 
+0

Merci. Cela répond au besoin et est très simple. –