.NET XmlDocument LoadXML und Organisationen
Beim laden von XML-Daten in ein XmlDocument, d.h.
- Dokument XmlDocument = new XmlDocument(); Dokument.LoadXml(XML);
gibt es eine Möglichkeit, den Prozess zu stoppen, die durch das ersetzen Entitäten? Ich habe ein seltsames problem wo ich habe ist ein TM symbol (gespeichert als Entität #8482) in xml konvertiert, in das TM-Zeichen. Soweit ich bin besorgt, das sollte nicht passieren, als das XML-Dokument muss die Codierung ISO-8859-1 (die nicht über das TM-symbol)
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein standard-Missverständnis der XML-toolset. Das ganze Geschäft mit "&#x", ist eine syntaktische Funktion, die geschaffen wurde, um zu bewältigen mit Zeichenkodierungen. Ihre XmlDocument ist nicht ein stream von Zeichen - es wurde befreit von character-encoding-Probleme - sondern es enthält ein abstraktes Modell der XML-Typ Daten. Worte dafür sind der DOM und InfoSet, ich bin mir nicht ganz sicher, welche richtig ist.
Den "&#x" gubbins wird nicht existieren in diesem Modell, weil das ganze Thema irrelevant ist, wird es wieder - wenn angebracht - bei der Transformation von der Info wieder in einen Zeichen-stream in einer bestimmten Kodierung.
Dieses Missverständnis ist ausreichend, um gemeinsame haben es in der akademischen Literatur als Teil einer Sammlung von ähnlichen Macken. Werfen Sie einen Blick auf "Xml-Fieber" an dieser Stelle: http://doi.acm.org/10.1145/1364782.1364795
Was schreiben Sie es zu? Ein TextWriter? ein Stream??? was?
Den folgenden hält die Person (gut, es ersetzt es mit der hex-Entsprechung) - aber wenn Sie das gleiche tun, mit einem StringWriter-es erkennt die unicode und verwendet stattdessen:
Ausgänge:
Gestehe ich, daß ich die Dinge ein wenig verwirrend, mit XML-Dokumenten und-encodings, aber ich würde hoffen, dass es bekommen würde, legen Sie geeignet, wenn Sie speichern es erneut, wenn Sie noch mit ISO-8859-1 - aber wenn Sie speichern mit UTF-8, wäre es nicht müssen. In gewisser Weise logisch das Dokument wirklich das symbol enthält, sondern die entity-Referenz - letzteres ist nur eine Codierung egal. (Ich bin laut denken hier - bitte nehmen Sie das nicht als verbindliche Informationen.)
Was machst du mit dem Dokument nach dem laden?
Ich glaube, wenn Sie schließen Sie die Einheit Inhalt in einem CDATA-Abschnitt sollte lassen alles allein z.B.
Entity-Referenzen sind nicht die Kodierung spezifischer. Nach der W3C XML 1.0-Empfehlung:
Den &#xxxx; Entitäten betrachtet, sind die Zeichen, die Sie darstellen. Alle XML ist in unicode konvertiert, auf Lesen und solche Personen entfernt werden, zu Gunsten der unicode-Zeichen, die Sie darstellen. Dies umfasst alle vorkommen, die für Sie im unicode-Quelle, wie die Zeichenfolge übergeben, um LoadXML.
Ebenso auf das schreiben von beliebigen Zeichen, das nicht dargestellt werden kann durch den stream geschrieben wird, wird in ein &#xxxx; entity. Es gibt wenig Sinn zu versuchen, Sie zu bewahren.
Ein häufiger Fehler ist, erwarten, um einen String aus einem DOM durch einige Mittel mit einer anderen Codierung dann unicode. Das geht so einfach nicht passieren, unabhängig davon, was die
Dank für all die Hilfe.
Habe ich mein problem behoben, indem eine HtmlEncode Funktion, die eigentlich ersetzt alle Zeichen, bevor es spuckt Sie aus, um die Webseite (anstatt sich auf die etwas gebrochen HtmlEncode() .NET-Funktion, die nur scheint zu Kodieren eine kleine Teilmenge der Zeichen notwendig)