2010-10-28 8 views
11

Chcę załadować XmlNode bez uzyskania XmlException, gdy obecny jest nierozpoznany obszar nazw.Jak załadować obiekt XmlNode ignorując niezadeklarowane przestrzenie nazw?

Powodem jest to, że muszę przekazać instancję XMLNode do metody. Ładuję arbitralne fragmenty XML z przestrzeniami nazw z ich oryginalnego kontekstu (np. Formatowanie MSWord i inne produkty oprogramowania o różnych schematach, które "zanieczyszczają" zawartość przedrostkami przestrzeni nazw). Przestrzenie nazw nie są ważne dla mnie ani dla metody docelowej, do której są przekazywane. (To dlatego, że metoda docelowa używa go jako HTML do renderowania i przestrzenie nazw będą ignorowane lub tłumione naturalnie).

Przykład
Oto przykładowy fragment Próbuję dokonać XmlNode Spośród:

<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> 

Kiedy próbuję załadować je do instancji XmlDocument (to moja próba, aby uzyskać XmlNode) pojawia się następujący XML Wyjątek:

„ST1” jest niezarejestrowanej nazwy tempo. Wiersz 3, pozycja 251.

Co zrobić, aby uzyskać instancję XmlNode z tego fragmentu XML?

Odpowiedz

29

XmlTextReader ma właściwość Namespaces można wyłączyć:

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

dziękuję. To odpowiada potrzebom i jest bardzo proste. –