2014-10-14 12 views
5

So habe ich einige XML zu stoppen:Wie XMLReader Wurf Ungültige XML Character Exception

<key>my tag</key><value>my tag value &#xB;and my invalid Character</Value>

und eine XMLReader:

using (XmlReader reader = XmlReader.Create(new StringReader(xml))) 
{ 
    while (reader.Read()) 
    { 
     //do my thing 
    } 
} 

ich umgesetzt haben die CleanInvalidCharacters Methode von here aber als " & #xB "ist noch nicht codiert, wird nicht entfernt.

Der Fehler wird auf den Reader geworfen. Read(); Zeile mit Ausnahme:

Hexadezimalwert 0x0B, ist ein ungültiges Zeichen.

Antwort

8

Das Problem ist, dass Sie nicht XML haben - Sie haben eine Zeichenfolge, die sicher wie XML aussieht, aber leider nicht wirklich qualifiziert. Zum Glück können Sie XmlReader sagen milderen zu sein:

using (XmlReader reader = XmlReader.Create(new StringReader(xml), new XmlReaderSettings { CheckCharacters = false })) 
{ 
    while (reader.Read()) 
    { 
     //do my thing 
    } 
} 

Beachten Sie, dass Sie immer noch mit XML enden wird, die, wenn serialisiert, könnte Probleme weiter auf der ganzen Linie produzieren, so können Sie die verschiedenen wollen auszufiltern danach sowieso wie du es liest.

+0

Wie würde ich Werte weiter unten herausfiltern? Würde ich es in der while-Schleife tun. Codiere es als XML und entferne ungültige Zeichen? – user1

+0

Sie können den in Ihrem ursprünglichen Beitrag erwähnten Ansatz "CleanInvalidCharacters" für die Textknoten, Element- und Attributwerte verwenden (wie Sie sie in der while-Schleife tatsächlich finden). Es wird jetzt funktionieren, da die Zeichen bereits dekodiert wurden. –