Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   C# XmlDocument - Umlaute (https://www.delphipraxis.net/60860-xmldocument-umlaute.html)

Garby 13. Jan 2006 09:17


XmlDocument - Umlaute
 
Hallo,

ich lese einen XML-Stream direkt aus dem Internet.
Umlaute werden dabei folgendermaßen übertragen (Beispiel Flächenbrand):
XML-Code:
<description>Fl&amp;auml;chenbrand</description>
Lese ich den Tag über
Code:
XmlNode.Value
aus, dann wird der Umlaut nicht korrekt umgesetzt (Fl&auml;chenbrand).

Ich habe vorher TJvSimpleXML in Delphi verwendet, wo es ohne Probleme funktioniert hat.

Danke im Voraus

[edit: falsche Programmiersprache ;)]

Garby 17. Jan 2006 10:44

Re: XmlDocument - Umlaute
 
:gruebel:

alcaeus 17. Jan 2006 13:12

Re: XmlDocument - Umlaute
 
Moin,

ich hatte auch ein aehnliches Problem (allerdings in HTML), und habe es geloest, indem ich dem XML-Dokument "UTF-8" als Charset gegeben habe, und alle Daten UTF-8-kodiert habe ;)

Greetz
alcaeus

Garby 17. Jan 2006 13:25

Re: XmlDocument - Umlaute
 
Hi alcaeus.

Inzwischen habe ich es auch so gelöst.
Allerdings existieren noch mehrere Server, die ich nicht auf UTF8 umstellen kann.

Sascha L 26. Feb 2006 09:36

Re: XmlDocument - Umlaute
 
Hi,

schreib dir einfach eine Funktion, die in dem übergebenden String alle Entities in Umlaute ändert.

Delphi-Quellcode:
str_mit_entities := 'J&auml;ger';
str_mit_umlauten := StringReplace(str_mit_entities,'&auml;','ä',[rfReplaceAll, rfIgnoreCase]);
// str_mit_umlauten = Jäger
Das musst du dann natürlich mit allen anderen Entities auch machen. ;)

Gruß
Sascha

marabu 26. Feb 2006 11:54

Re: XmlDocument - Umlaute
 
Hi folks.

Auch wenn das Problem von Walter scheinbar zu seiner eigenen Zufriedenheit gelöst ist - ein paar Anmerkungen hätte ich noch dazu.

Zitat:

Zitat von Garby
ich lese einen XML-Stream direkt aus dem Internet.

Wäre es eine XML stream, dann käme er mit einer passenden DTD für die verwendeten entities. Soll aber lediglich well formed HTML als XML verarbeitet werden, dann hilft es im client nachzubessern und die benötigte DTD zu injizieren - beispielsweise über einen stream adapter - die Wahl der Methode hängt vom verwendeten XML Parser ab. Herauskommen muss das hier:

XML-Code:
<?xml version="1.0"?>
<!DOCTYPE html SYSTEM "html.dtd">
<html>
  <description>Fl&auml;chenbrand</description>
</html>
Es muss dann die Datei html.dtd mit folgendem Inhalt hinterlegt werden:

XML-Code:
<!ENTITY % isolat1 PUBLIC
  'ISO 8879:1986//ENTITIES Added Latin 1//EN//XML'
  'iso-lat1.ent' >
%isolat1;
Stört euch nicht an der Indirektion über eine Parameter-Entity - der Inhalt der Datei iso-lat1.ent kann in diesem stark vereinfachten Beispiel auch direkt in html.dtd abgelegt werden:

XML-Code:
<!ENTITY auml   "&#x00E4;">
<!ENTITY Auml   "&#x00C4;">
<!ENTITY ouml   "&#x00F6;">
<!ENTITY Ouml   "&#x00D6;">
<!ENTITY szlig   "&#x00DF;">
<!ENTITY uuml   "&#x00FC;">
<!ENTITY Uuml   "&#x00DC;">
Bei dieser Vorgehensweise werden die HTML character entities vom XML Parser automatisch korrekt umgesetzt.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 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