![]() |
Probleme mit XML Encoding
Hallo,
ein Fremdprogramm X exportiert XML Dateien. Diese soll mein Programm verarbeiten. Ich habe keine Möglichkeit, auf den Export Einfluss zu nehmen. Aufgebaut sind die Dateien immer gleich
Code:
usw.
<HEDX>
<BODY> <ExportType>Export</ExportType> <SWVersion> <Name>Viewing Module</Name> <Version>6.5.7.0</Version> </SWVersion> <Patient> <PatientUIDList> <NumUIDs>1</NumUIDs> <PatientUID> <Source>LOC1456211344</Source> <UID>LOC1456211344.418d33f0-10c5-4445-8a20-f3bd5f62190b</UID> </PatientUID> </PatientUIDList> <ID>3005</ID> <PID>200115203</PID> <LastName>Müller</LastName> <FirstNames>Franz</FirstNames> Mein Code
Delphi-Quellcode:
Es gibt nun ein Problem mit den Umlauten, als Exception erscheint immer
procedure Te2e.starteVerarbeitung;
var Xml : IXMLDocument; begin Xml:=newXMLDocument; try Xml.Encoding:='UTF-8'; Xml.LoadFromFile(FXml); Xml.Active:=True; Erste Gelegenheit für Exception bei $7576C54F. Exception-Klasse EDOMParseError mit Meldung 'Im Textinhalt wurde ein ungültiges Zeichen gefunden. Zeile: 18 <LastName>M'. Ich hatte es auch schon mit LoadFromStream versucht, da kann man das Encoding ja auch mit angeben, aber das gleiche Problem Hat jemand eine Idee? Gruß |
AW: Probleme mit XML Encoding
das umlaut löst den fehler aus, das sollte wahrscheinlich berücksichtigt werden.
Grüße |
AW: Probleme mit XML Encoding
Das hatte ich ja geschrieben
"Es gibt nun ein Problem mit den Umlauten" Nur wie gehe ich damit um? |
AW: Probleme mit XML Encoding
Versuch mal
Delphi-Quellcode:
Xml.Encoding:='windows-1252';
|
AW: Probleme mit XML Encoding
Leider der gleiche Fehler
|
AW: Probleme mit XML Encoding
damit wollt ich andeuten, du kennst ja dein problem und wollt auf soetwas in etwa hinaus, einen xml parser
Zitat:
grüße |
AW: Probleme mit XML Encoding
Habe es nun anders gelöst.
Lese erst die XML Datei in einer Variable FXMLContent und setze an den Anfang die Encoding Informationen. Danach verwende ich
Delphi-Quellcode:
Xml.LoadFromXML(FXMLContent);
|
AW: Probleme mit XML Encoding
Zitat:
Delphi-Quellcode:
hat garnichts mit dem Einlesen zu tun.
Xml.Encoding
Da steht das Encoding drin, was beim Auslesen der XML genutzt wurde, bzw. welches beim Speichern verwendet wird. Erstmal ist diese XML nicht valide aka "ungültig", womit der Fehler völlig korrekt ist. Es gilt das Encoding via BOM (für den ersten XML-Node), wenn kein BOM dann UTF-8. Und gibt es eine Processing Instruction (
Delphi-Quellcode:
), dann gilt nach ihr das darin definierte Encoding.
<?xml ...?>
Als Ausnahme gelten UTF-16 LE und BE, welche auch ohne BOM am ersten
Delphi-Quellcode:
erkannt werden können. (#0'<' oder '<'#0)
<
Ohne Angabe eines Encoding sind XML immer UTF-8, also liegt der Fehler beim schreibenden Programm, wenn es ein falsches Encoding verwendet, als es (nicht) in der XML definiert hat. Kann man beim LoadFromFile ein TEncoding-Parameter übergeben werden, um das Default-Encoding zu ändern? Wenn nicht, dann mußt du die Datei selber einlesen, dabei das gewünschte TEncoding verwenden (bei normalen Textdateien ist es ANSI, unter Windows) und dann als String via LoadXML (oder wie das hieß) laden. > Lesen mit TStringList oder ![]() |
AW: Probleme mit XML Encoding
Zitat:
Wenn du an diesem Fehler nix machen kannst (habe ich z.B. auch bei Adobe-SW die - sagen wir mal Adobe XML schreibt -), so solltest du evtl ein FixDefectXMLFromXYZ-Methode schreiben welche die Codierung korrekt setzt und den XML-Header ebenfalls ergänzt. Dann kannst du mit dem XML-Parser deiner Wahl nutzen. |
AW: Probleme mit XML Encoding
Was Bernhard meint, ist das hier:
Delphi-Quellcode:
var
Stream1: TFileStream; Stream2: TMemoryStream; const Head: AnsiString = '<?xml version="1.0" encoding="UTF-8"?>'; // oder Encoding Windows-1252 begin Stream1 := TFileStream.Create(DateiDatei, fmOpenRead or fmShareDenyNone); Stream2 := TMemoryStream.Create; try Stream2.Write(Head[1], Length(Head)); Stream2.Copyfrom(Stream1, 0); Stream2.Position := 0; // bla Xml.LoadFromStream(Stream2); // bla finally Stream1.Free; Stream2.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz