Das folgende XML kann nicht aus Delphi gelesen werden, da es ein ungültiges ° -Symbol enthält:
%Vor%Es scheint, dass Delphi nicht die "Standard" -Methode in XML erkennt:
%Vor%Delphi scheint damit umzugehen ok:
%Vor%Da ich die Daten von einem RESTful-Web-Service erhalte, habe ich nicht die Kontrolle über die XML-Pakete. Ich muss sie nur lesen können.
Fragen
Delphi 2010 verwenden. Jede Hilfe wäre willkommen.
Wenn ich nur Davids Antwort ausführe, schließt XML keinen Wert in einem Textknoten aus (außer für sehr wenige reservierte Zeichen), solange sie in der aktuellen Codierung gültig sind.
Es gibt ein paar fehlende Fakten zu Ihrer Frage:
Produzieren Sie dieses XML mit einem Texteditor?
Wenn dies zutrifft, müssen Sie überprüfen, welche Kodierung Sie beim Speichern der Datei verwenden. Probieren Sie UTF-8. Wenn Ihre Dokumente mit der Codierung "Windows" erstellt werden, fügen Sie dem XML-Steuerelement-Tag ein Codierungsattribut hinzu, z. B. <?xml version="1.0" encoding="iso-8859-1"?>
.
Produzieren Sie dieses XML mithilfe von Delphi String-Funktionen? Wenn dies der Fall ist, ist die von Delphi verwendete Kodierung standardmäßig UTF-8, aber Sie können sie versehentlich mit anderen Kodierungen mischen, wenn Sie Fragmente aus externen Quellen lesen. Für dieses Problem gibt es kein Patentrezept, außer dass Sie Ihre XML-Bibliothek mit integrierten Funktionen zum Erstellen von XML verwenden.
Wenn ich mich mit diesen Dingen beschäftigen musste (für XML-Signaturen, nicht weniger!), verwendete ich Wrapper für jede verwendete Zeichenkette und verwende explizite Codierungen (ich benutze type Latin1String = type AnsiString(28591)
.)
Delphi selbst analysiert das XML überhaupt nicht. Eine Drittanbieter-XML-Engine funktioniert, egal ob MSXML, OpenXML, AtomXML usw. Die TXMLDocument-Komponente und unterstützende Schnittstellen sind nur ein Wrapper-Framework, der Großteil der Analyse wird von jemand anderem ausgeführt.
V1 kann oder darf nicht fehlerhaft sein. Es hängt von dem tatsächlichen Zeichensatz von XML ab.
V2 ist eigentlich kein Standard. Nicht alle XML-Engines unterstützen dies. Natürlich, die, die Sie mit Delphi verwenden, nicht.
V3 ist standardisiert, und alle XML-Engines unterstützen diese Syntax.
Hier haben Sie direkt den Charakter codiert. Ob Ihr Code dies analysieren kann oder nicht, hängt vom Zeichensatz ab, der von Ihrem XML-Dokument verwendet wird. Wenn Ihr XML-Dokument UTF-8 verwendet und korrekt kodiert ist, kann Ihr XML-Code es analysieren.
%Vor%Dies verwendet eine benannte Entität , deg . In XML gibt es nur fünf vordefinierte benannte Entitäten : quot , amp , apos , lt , gt . Es ist möglich, dass ein XML-Dokument andere benannte Entitäten definiert. Dies ist jedoch ungewöhnlich. Es scheint also, dass deg keine gültige benannte Entität für Ihr Dokument ist.
%Vor%Diese Version verwendet eine numerische Zeichenreferenz , NCR. Sie können eine NCR verwenden, um einen beliebigen Unicode-Codepunkt anzugeben.
Was Sie vorwärts tun sollten, können wir die benannte Entität sofort ausschließen. Ich würde auch empfehlen, die Großhandelsnutzung von NCRs für alle Nicht-ASCII-Zeichen zu vermeiden. Das führt nur zu unlesbaren Dokumenten. Wenn Sie ein nicht-Unicode-fähiges Tool zur Verarbeitung des Dokuments verwenden müssen, ist die Verwendung von NCRs die einzige Möglichkeit.
Damit können wir direkt Nicht-ASCII-Zeichen codieren. Sie sollten sicherstellen, dass Ihr XML korrekt mit dem UTF-8-Zeichensatz codiert ist und dieser Ansatz funktioniert gut und führt zu lesbaren und sauberen Dokumenten.
Tags und Links xml delphi delphi-2010