2013-10-16 3 views
8

Ich habe eine XML-Zeichenfolge, die auf dem Server auf einen Aschx-Handler gepostet wird. Die XML-Zeichenfolge wird auf der Clientseite erstellt und basiert auf ein paar verschiedenen Eingaben in einem Formular. Gelegentlich werden einige Benutzer kopieren und aus anderen Quellen in das Webformular einfügen. Wenn ich versuche, den XML-String in ein XMLDocument Objekt zu laden mit xmldoc.LoadXml(xmlStr) ich die folgenden Ausnahme erhalten: (? Entschuldigung, ich bin nicht sicher, es ist offizieller Titel)Entfernen Sie alle Hexadezimalzeichen, bevor Sie eine Zeichenfolge in das XML-Dokumentobjekt laden?

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

Im Debug-Modus kann ich den Schurken Charakter sehen:

Meine Fragen ist, wie kann ich die XML-Zeichenfolge desinfizieren, bevor ich versuche, es in das XMLDocument-Objekt zu laden? Benötige ich eine benutzerdefinierte Funktion, um all diese Arten von Zeichen einzeln zu analysieren oder kann ich eine native .NET4-Klasse verwenden, um sie zu entfernen?

Rogue character in debug mode

+0

Ich nehme an, du meinst "Schurken" Charakter. Rouge ist französisch für "rot". – Nyerguds

Antwort

23

Hier haben Sie ein Beispiel xml ungültige Zeichen zu reinigen Regex mit:

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

Eine effizientere Art und Weise auf ungültige XML-Zeichen nicht Fehler aus wäre die CheckCharacters Flagge in XmlReaderSettings zu verwenden .

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); 
    } 
} 
Verwandte Themen