2009-06-16 5 views
0

Ich habe einige XML, die mit einem XmlDocument-Objekt in C# erstellen erstellt.SQL 2005 XML Special/Escaped Zeichen aus System.Xml.XmlDocument.OuterXml

Ich bin dann Einfügen der XML-Daten in eine XML-Spalte in SQL 2005 mit der XmlDocument.OuterXml-Methode, um die rohe XML zu erhalten.

Das Problem, das ich habe, ist, dass die XML einige Sonderzeichen enthält. Nämlich:  Das liegt daran, dass das XML aus Benutzereingaben von verschiedenen Quellen aufgebaut ist.

Wenn ich die Einfügung ausführe, erhalte ich eine SQL-Fehlermeldung, die besagt, XML-Analyse: illegales XML-Zeichen.

CREATE TABLE #MyTable (MyColumn XML) 
INSERT INTO #MyTable VALUES ('<Element>&#x1F;&#x1C;</Element>') 

Msg 9420, Ebene 16, Status 1, Zeile 2

XML-Analyse: Zeile 1, Zeichen 15, illegal xml Charakter

Kann mich jemand in eine Richtung zeigen, wie ich kann, löse das?

Es wird extrem schwierig für mich sein, irgendetwas am XmlDocument-Objekt oder Original-XML selbst zu ändern, jedoch kann ich den Mechanismus ändern, den ich verwende, um das RAW-XML zu erhalten. Ich kann meine Datenbankeinstellungen auch ändern, wenn erforderlich.

Antwort

1

Wenn Sie ein XmlDocument mit ungültigen Zeichen haben, haben Sie im Grunde kein gültiges XML. Es gibt keine Möglichkeit, irgendetwas unter U + 0020 außer Tabulator, Carriage Return und Zeilenvorschub in XML darzustellen. Ich bin mir nicht ganz sicher warum, aber es ist ein ungültiges XML gemäß der Spezifikation.

könnten Sie speichern den rohen Text der ungültigen XML in der Datenbank, aber ich nehme an, es gibt einen Grund, warum man es wollte eine XML-Spalte in erster Linie sein :)

Wollen Sie tatsächlich Bewahren Sie dieses ungültige XML auf? Weißt du, woher es kommt und ob es benötigt wird? Ich würde persönlich versuchen, die Daten soweit wie möglich zu bereinigen.

(Btw, der erste Stack-Überlauf Datendump hatte ein sehr ähnliches Problem, es ist also nicht nur Sie :)

+0

gibt es eine Möglichkeit, die XmlDocument o zu machen bjekt erzwingen die gleichen Validierungsregeln? Diese Zeichen stammen von einem Benutzer, der sie in ein HTML-Textfeld eingibt/einfügt und dieser TextBox.Text wurde dann XmlNode.InnerText zugewiesen. Wenn es sich um ungültiges XML handelt, bin ich überrascht, dass es an diesem Punkt nicht abgestürzt ist. –

+0

Werfen Sie einen Blick auf http://msdn.microsoft.com/en-us/library/56xykaw6.aspx –

+0

Ich muss die ungültigen Daten nicht beibehalten. Es ist alles Benutzereingaben von Webseiten und so nicht sicher, wie irgendwelche Escape-Charaktere sowieso dort eingestiegen sind. Ich möchte es reinigen, ich brauche nur eine elegante Lösung. Ich habe einen Code gefunden, der ungültige Zeichen löscht, indem er die ganze Zeichenfolge durchläuft. Das erscheint mir einfach falsch, ich sollte nicht kodieren, welche Zeichen gültig sind und welche nicht. –

0

Dies ist möglich, INSERT INTO #MyTable VALUES ('& # x1F;')

ich füge Räume jetzt Klarheit

INSERT INTO #MyTable VALUES ('< E lement> & amp; # x 1 F; </E lement>')