2013-10-16 13 views
8

Ho una stringa xml che viene pubblicata su un gestore ashx sul server. La stringa xml è costruita sul lato client e si basa su poche voci differenti fatte su un modulo. Occasionalmente alcuni utenti copieranno e incolleranno da altre fonti nel modulo web. Quando provo a caricare la stringa XML in un oggetto XMLDocument utilizzando xmldoc.LoadXml(xmlStr) ottengo la seguente eccezione: (? Mi dispiace non sono sicuro del suo titolo ufficiale)Rimuovere tutti i caratteri esadecimali prima di caricare la stringa nell'oggetto documento XML?

System.Xml.XmlException = {"'', hexadecimal value 0x0B, is an invalid character. Line 2, position 1."} 

In modalità di debug posso vedere il carattere canaglia:

Le mie domande sono: come posso disinfettare la stringa xml prima di provare a caricarla nell'oggetto XMLDocument? Ho bisogno di una funzione personalizzata per analizzare tutti questi tipi di caratteri uno per uno o posso usare qualche classe nativa .NET4 per rimuoverli?

Rogue character in debug mode

+0

Immagino si intenda il carattere "canaglia". Rouge è francese per "rosso". – Nyerguds

risposta

23

Ecco un esempio di pulizia xml caratteri non validi utilizzando Regex:

xmlString = CleanInvalidXmlChars(xmlString); 
XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml(xmlString); 

public static string CleanInvalidXmlChars(string text) 
{ 
    string re = @"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]"; 
    return Regex.Replace(text, re, ""); 
} 
2

Un modo più efficiente per non errore su caratteri XML non validi sarebbe quella di utilizzare la bandiera CheckCharacters in XmlReaderSettings .

var xmlDoc = new XmlDocument(); 
var xmlReaderSettings = new XmlReaderSettings { CheckCharacters = false }; 
using (var stringReader = new StringReader(xml)) { 
    using (var xmlReader = XmlReader.Create(stringReader, xmlReaderSettings)) { 
     xmlDoc.Load(xmlReader); 
    } 
} 
Problemi correlati