2014-10-14 12 views
5

Così ho qualche XML:Come fermare XMLReader lancio non valido XML Character Eccezione

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

e un XMLReader:

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

Ho implementato il metodo CleanInvalidCharacters da here ma come il " & #xB "non è ancora codificato, non viene rimosso.

L'errore viene generato dal lettore. Lettura(); riga con eccezione:

valore esadecimale 0x0B, è un carattere non valido.

risposta

8

Il problema è che non si dispone di XML: si dispone di una stringa che sembra sicuramente XML ma purtroppo non si qualifica realmente. Per fortuna si può dire XmlReader ad essere più indulgente:

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

Nota che sarà ancora finire con XML che, quando serializzato, potrebbe produrre ulteriori problemi lungo la linea, quindi si potrebbe desiderare di filtrare i personaggi fuori in seguito in ogni caso mentre lo stai leggendo.

+0

Come filtrare i valori più in basso? Lo farei nel ciclo while. Codificalo come xml e rimuovi i caratteri non validi? – user1

+0

Puoi usare l'approccio 'CleanInvalidCharacters' menzionato nel tuo post originale sui nodi di testo, sugli elementi e sui valori degli attributi (come li incontri nel ciclo while, in effetti). Funzionerà ora poiché i caratteri sono già stati decodificati. –