AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

HTML-Encoding in XML

Ein Thema von Incocnito · begonnen am 1. Mär 2021 · letzter Beitrag vom 2. Mär 2021
Antwort Antwort
Incocnito

Registriert seit: 28. Nov 2016
164 Beiträge
 
#1

HTML-Encoding in XML

  Alt 1. Mär 2021, 11:53
Hi Zusammen,

ich muss eine Delphi-Schnittstelle für XML-Dateien bauen.
Nun habe ich mit Hilfe einer Beispiel-XML und eines Online-Umwandlers eine XSD generieren lassen
und dann mit Delphi wiederum eine PAS-Datei. Wie wir alle wissen ist das nicht so spannend
aber wenigstens schonmal ein erster Schritt, damit man nicht alles selbst machen muss.
Ich habe nun zwei Probleme. Einmal ändert er das "Encoding" und einmal habe ich einen Knoten,
welchen ich nicht eingelesen bekomme.
Hier nun das erste Problem:
In der XML-Beispiel-Datei gibt es faktisch kein Encoding und Sonderzeichen werden durch
die HTML-Codes dargestellt. Somit ist es auch (fast) egal mit welchem Encoding ich das einlese.
Ein Beispielknoten sieht dann also wie folgt aus:
Code:
<name value="Hausarztpraxis Dr. Topp-Gl&#252;cklich" />
Wenn ich das einlese macht er mir zwar wunderbar "Hausarztpraxis Dr. Topp-Glücklich" davon,
aber wenn ich ein neues XML generiere und die Daten übernehme, steht beim Speichern der neuen
Daten
Code:
<name value="Hausarztpraxis Dr. Topp-Glücklich"/>
Er hat also sclicht das mit dem nächst-Besten Encoding (ich rate mal UTF-8)
gespeichert.
Die Frage ist also: Wie bekomme ich Delphi dazu alles wie im Original
"ohne Encoding" (ich weiß das ist jetzt auch nicht ganz richtig,
aber ich hoffe ihr wisst was ich meine) zu speichern.
Ich kann nicht sicherstellen, dass die Endstelle die Daten (sie sind nämlich ohne XML-Header)
mit dem richtigen Encoding einliest.
Unterm Strich will ich halt "ü" in den Daten stehen haben.

Das zweite Problem? Naja, später vielleicht.

MfG Incocnito

[Edit:] In dem Moment, wo ich auf Speichern gehe sehe ich, dass ich im falschen Bereich bin! Sorry Admins! Gerne verschieben!

Geändert von Incocnito ( 1. Mär 2021 um 16:53 Uhr) Grund: Info
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
391 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: HTML-Encoding in XML

  Alt 1. Mär 2021, 14:43
Bei XML Dateien ist der Default UTF-8. Dateien ohne Encodingangaben werden als UTF-8 gelesen. Da musst du dich auch dran halten und die Daten als UTF-8 ins XML schreiben. Gleichzeitig auch noch den Text in den Nodes XML encoden.

Delphi-Quellcode:
function XMLEncode(const AStr: String): String;
const
  Convert = ['&','<','>','"',''''];
var
  Sp, Rp: PChar;
begin
  SetLength(Result, Length(AStr) * 10);
  Sp := PChar(AStr);
  Rp := PChar(Result);
  while Sp^ <> #0 do
  begin
    case Sp^ of
      '&': begin
             FormatBuf(Rp{$IFNDEF UNICODE}^{$ENDIF}, 5, '&amp;', 5, []);
             Inc(Rp,4);
           end;
      '<',
      '>': begin
             if Sp^ = '<then
               FormatBuf(Rp{$IFNDEF UNICODE}^{$ENDIF}, 4, '<', 4, [])
             else
               FormatBuf(Rp{$IFNDEF UNICODE}^{$ENDIF}, 4, '>', 4, []);
             Inc(Rp,3);
           end;
      '"': begin
             FormatBuf(Rp{$IFNDEF UNICODE}^{$ENDIF}, 6, '&quot;', 6, []);
             Inc(Rp,5);
           end;
      '''': begin
             FormatBuf(Rp{$IFNDEF UNICODE}^{$ENDIF}, 6, '&apos;', 6, []);
             Inc(Rp,5);
           end;
    else
      Rp^ := Sp^
    end;
    Inc(Rp);
    Inc(Sp);
  end;
  SetLength(Result, Rp - PChar(Result));
end;

Geändert von Rolf Frei ( 1. Mär 2021 um 16:59 Uhr)
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
164 Beiträge
 
#3

AW: HTML-Encoding in XML

  Alt 1. Mär 2021, 17:08
Ich musste den ursprungsbeitrag nochmal anpassen ...
Das Forum hatte aus "& #252;" (nur ohne Leerzeichen) automatisch "ü" gemacht.
Das führte die Frage natürlich ad absurdum.
Also nochmal kurz:
In den XML-Daten (String/Datei/whatever) steht die HTML-Notation ("& auml;" beispielsweise)
aber wenn ich die Daten auslese und wieder wegschreibe steht in den Daten das
UTF-8-Zeichen (dann also "ä"). Und das will ich nicht. Ich will die HTML-Notation behalten.
Geht das nicht? Muss ich dann die XML in einen String-Stream laden und mit Suchen-Ersetzen
alle Zeichen die mir einfallen manuell austauschen? Das würde ich nun nicht so feiern!

Anmerkung: Ich muss in die HTML-Codes Leerzeichen einfügen, da sonst das Forum mir das
weg-korrigiert.

Liebe Grüße
Incocnito
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
391 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: HTML-Encoding in XML

  Alt 1. Mär 2021, 20:27
Das & uml; ist im XML-File eigentlich falsch. Da müssen nur die im obigen Code (XMLEncode) aufgezeigten Zeichen encodet werden. Das ä als UTF-8 im File ist so absolut richtig.

Noch als Bemerkung: & #252; ist kein UTF-8 Zeichen sondern der ISO-8859 ANSI Code. Bei UTF-8 wären das 2 ANSI 8Bit Zeichen. Jetzt frage ich mich natürlich, ob du die Datei wirklich in UTF-8 erstellst. Wenn Du TXMLDocument oder ähnliches zum Lesen/Schreiben nutzt, wird das automatisch konvertiert. Wenn du die XML-Date selber schreibst, musst du sicher stellen, das du die Datei korrekt im UTF-8 Format speicherst.

Geändert von Rolf Frei ( 1. Mär 2021 um 20:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.731 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: HTML-Encoding in XML

  Alt 1. Mär 2021, 21:28
Jupp, man sollte nicht HTML mit XML verwechseln. Per se sind das zwei komplett unterschiedliche Dinge, die nur rein zufällig ähnlich aussehn.
In HTML gibt es Dinge, die es in XML nicht gibt. (zusätzlich, dass HTML teilweise auch Fehlerresistent ist, bzw. die HTML-Parser können die krankesten Fehler ignorieren/beheben)
In XML gibt es nur die 5 Entity für & < > ' ", also die Steuerzeichen einer XML, und sonst muß alles mummerich kodiert sein.

XHTML ist HTML, was aber mit XML kompatibel ist, bzw. es "muß" dort valides XML sein (strict), womit es auch von XML-Parsern gelesen werden kann.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 2. Mär 2021 um 10:33 Uhr)
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
164 Beiträge
 
#6

AW: HTML-Encoding in XML

  Alt 2. Mär 2021, 09:51
Es hat ja auch keinen XML-Header ...
es lässt sich halt mit den Bordmitteln von Delphis XML-Handling "einigermaßen" auslesen.
Da die Schnittstelle das so vorgibt werde ich das so machen müssen,
auch wenn es nicht XML-konform ist. ... Weil es vielleicht gar kein XML ist ... kp.
Zum Glück meckert Delphi nicht, dass die Daten im ungültigem XML vorliegen.
Solche Konstrukte komplett von Hand zu parsen fände ich nicht so spannend.
Das Ganze nennt sich wohl "FHIR" ... ich habe keinen Plan und kratze gerade erst an der Oberfläche.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.731 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: HTML-Encoding in XML

  Alt 2. Mär 2021, 10:41
Laut Beschreibung ist FHIR (Fast Healthcare Interoperability Resources) die ganze Infrastructur drumrum.
Die Daten können mit "erprobten" Technologien representiert werden, also XML oder JSON, und sonst werden viele weitere "moderne" web-basierte Technologien genutzt (REST, HTML, TLS und OAUTH2).

Klingt zwar bissl Blablabla....,
aber somit wäre es schon richtig hier XML zu nutzen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf