AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi MSXML: umlaute als entites abspeichern
Thema durchsuchen
Ansicht
Themen-Optionen

MSXML: umlaute als entites abspeichern

Ein Thema von Aenogym · begonnen am 23. Jan 2006 · letzter Beitrag vom 24. Jan 2006
Antwort Antwort
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#1

MSXML: umlaute als entites abspeichern

  Alt 23. Jan 2006, 09:31
hi ihr,

ich habe einen string mit umlauten. diesen string möchte ich mithilfe von MSXML in meiner XML-datei speichern. mein xml-dokument ist UTF8-kodiert, weshalb msxml die umlaute auch brav als UTF8 abspeichert. ich muss allerdings trotzdem die entities speichern...
ein StringReplace vorher ützt nichts, da das &-zeichen des entities beim abspeichern in & umgewandelt wird....

habt ihr einen tipp für mich wie ich, trotz UTF8-kodiertem dokument, umlaute als entities speichern kann?

danke,
aeno
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: MSXML: umlaute als entites abspeichern

  Alt 23. Jan 2006, 09:47
Wozu braucht man zu Zeiten von Unicode noch diese &uml-Dingsens?
Würde mich nicht wundern, wenn MSXML in den neueren Versionen nur in einem altertümlichen ANSI XML File diesen Krempel anlegt.
Welche Anwendung verhält sich denn so eklig, dass sie noch die encodierten Umlaute braucht? Vllt kann man ja an der Seite schrauben um die Ursache anstatt der Symptome zu bekämpfen.
Robert Giesecke
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: MSXML: umlaute als entites abspeichern

  Alt 23. Jan 2006, 09:52
Zitat von Elvis:
Wozu braucht man zu Zeiten von Unicode noch diese &uml-Dingsens?
Würde mich nicht wundern, wenn MSXML in den neueren Versionen nur in einem altertümlichen ANSI XML File diesen Krempel anlegt.
Welche Anwendung verhält sich denn so eklig, dass sie noch die encodierten Umlaute braucht? Vllt kann man ja an der Seite schrauben um die Ursache anstatt der Symptome zu bekämpfen.
richtig, MSXML tut das eben aufgrund des UTF8. das programm, dass den inhalt der XML-datei anzeigt, zeigt aber leider diesen quatsch wie "ü" anstelle von "ü" an -.-

ich habe grad erfahren, dass es irgendetwas wie disable-output-encoding="yes" für XSL gibt.... vielleicht kann ich das irgendwie ja bei meinem problem verwenden. damit soll er nämlich den string so reinschreiben, wie ich ihm das sage.

aeno
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Benutzerbild von AndreasP
AndreasP

Registriert seit: 14. Aug 2003
Ort: Halle
82 Beiträge
 
Delphi 7 Professional
 
#4

Re: MSXML: umlaute als entites abspeichern

  Alt 23. Jan 2006, 10:59
mahlzeit,

da ich mal vor einem ähnlichen problem stand hab ich selbst dafür gesorgt das der widestring ordentlich in utf8 codiert wird. und zwar kannst du dafür:
Node.text := UTF8Encode(Value); bzw.
Delphi-Quellcode:
if Assigned(Node) then
result := UTF8Decode(Node.text);
verwenden. dann wird zwar aus E:\äöüß@áè ein E:\äöüß@áè aber sowohl der IE6 als auch FF 1.5 zeigen es korekt an.
Live long and prosper, Andy

Die Diskusion zum AppManager gibt es hier
Immer die aktuelle Version vom AppManger
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: MSXML: umlaute als entites abspeichern

  Alt 23. Jan 2006, 11:42
Hallo Steffen,

Zitat von Aenogym:
das programm, dass den inhalt der XML-datei anzeigt, zeigt aber leider diesen quatsch...
der Fehler ist eindeutig bei diesem Programm zu suchen. Wenn aber du dieses Programm nicht verbrochen hast, dann kannst du unbotsame Zeichen in deinem XML-Dokument durch eine vorherige XSL-Identity-Transformation mit dem output-encoding "US-ASCII" in ihre numeric character entities umwandeln:

Code:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

<xsl:output method="html" version="4.0" encoding="US-ASCII"/>

  <xsl:template match="/ | @* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()">
        <xsl:sort select="@titel"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
Je nach Inhalt deines Dokumentes musst du noch eine Anpassung machen. Oder du triffst bereits im IXMLDOMDocument Vorsorge, indem du dort eine XML-Deklaration mit der oben genannten Kodierung angibst:

Code:
<?xml version="1.0" encoding="US-ASCII"?>
In Verbindung mit einer DOCTYPE Anweisung können HTML Entities dann auch durch den MSXML Parser durchgeschleust werden, ohne dass sie verändert werden:

Code:
<!DOCTYPE html SYSTEM "html.dtd">
In der Datei html.dtd solltest du dann die gewünschten entities definieren:

Code:
<!ENTITY ouml "&#246;">
Wenn du aber Sonderzeichen in die Textknoten eingetragen hast und absolut HTML character entities gespeichert werden müssen, dann wirst du auf die Methode save() von IXMLDOMDocument verzichten und den wenig eleganten Weg über StringReplace() gehen müssen.

Zitat von Aenogym:
ich habe grad erfahren, dass es irgendetwas wie disable-output-encoding="yes"
Das soll wohl disable-output-escaping heißen und hat deprecated status, weil man beim W3C erkannt hat, dass diese Anweisung mit XML eigentlich nicht vereinbar ist.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: MSXML: umlaute als entites abspeichern

  Alt 23. Jan 2006, 17:39
hallo ihr,

danke für die vielen antworten
ich habe mich jetzt für den weniger eleganten aber unkomplizierteren weg entschieden: das ganze manuell mit StringReplace abarbeiten und selber speichern. funktioniert ganz prima so...

aeno
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: MSXML: umlaute als entites abspeichern

  Alt 23. Jan 2006, 22:14
Zitat von Aenogym:
danke für die vielen antworten
ich habe mich jetzt für den weniger eleganten aber unkomplizierteren weg entschieden: das ganze manuell mit StringReplace abarbeiten und selber speichern. funktioniert ganz prima so...
Das "ominöse" Programm zeigt es jetzt "Korrekt" an aber kein anderes Programm kann das XML mehr anzeigen weil es kein korrektes XML mehr ist - stimmts? Also hast Du nur an den Symptome herumgedokter und hast vermutlich in wenigen Tagen noch viel größere Probleme da evtl. anderen Programme die auf korrekter XML angewiesen sind nicht mehr gehen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: MSXML: umlaute als entites abspeichern

  Alt 24. Jan 2006, 19:39
Zitat von Bernhard Geyer:
Das "ominöse" Programm zeigt es jetzt "Korrekt" an aber kein anderes Programm kann das XML mehr anzeigen weil es kein korrektes XML mehr ist - stimmts? Also hast Du nur an den Symptome herumgedokter und hast vermutlich in wenigen Tagen noch viel größere Probleme da evtl. anderen Programme die auf korrekter XML angewiesen sind nicht mehr gehen.
also ich habe mit dem stringReplace() erreicht, dass jetzt im gesamten XML-dokument nur noch entities (wie z.B. &auml auftauchen. das sollte doch eigentlich von jedem programm korrekt angezeigt werden.

außerdem wäre das egal, da es sich bei diesen XML-dateien um eine art projektdatei für ein firmeninternes programm handelt. diese dateien geraten niemals an die öffentlichkeit, weshalb wir uns hierbei um kompatibilität keine sorgen machen müssen
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: MSXML: umlaute als entites abspeichern

  Alt 24. Jan 2006, 23:02
Zitat von Aenogym:
also ich habe mit dem stringReplace() erreicht, dass jetzt im gesamten XML-dokument nur noch entities (wie z.B. &auml auftauchen. das sollte doch eigentlich von jedem programm korrekt angezeigt werden.
Zieh es mal auf den IE oder Firefox. Wenn es dort pass dann sollte es kein problem geben.

Zitat von Aenogym:
außerdem wäre das egal, da es sich bei diesen XML-dateien um eine art projektdatei für ein firmeninternes programm handelt. diese dateien geraten niemals an die öffentlichkeit, weshalb wir uns hierbei um kompatibilität keine sorgen machen müssen
Dein Wort in Gottes Ohr. So oder so Ähnlich war es mit Sicherheit auch bei der Verwendung von 2 Zeichen für Datumangaben...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: MSXML: umlaute als entites abspeichern

  Alt 24. Jan 2006, 23:20
also der IE hat keine probleme damit (die entities sind von HTML geborgt und in usnerer DTD definiert).
es klappt alles wie gewünscht
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz