AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Wie komm ich an das Encoding-Element?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie komm ich an das Encoding-Element?

Ein Thema von Neuromancer · begonnen am 2. Jun 2006 · letzter Beitrag vom 7. Jun 2006
Antwort Antwort
Neuromancer

Registriert seit: 8. Aug 2003
62 Beiträge
 
Delphi 7 Enterprise
 
#1

Wie komm ich an das Encoding-Element?

  Alt 2. Jun 2006, 10:03
Hallo zusammen,

zuerst schnell die Info:
Parser: IXMLDOMDocument2 (erzeugt mit der ClassFactory CoDOMDocument40)
MS-XML-Version 5.0
Properties:
NewParser = True;
SelectionLanguage = XPath;

Code:
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<documentElement>
  ...Hier weitere Tags...
</documentElement>
Dann liest mir der folgende Code
Delphi-Quellcode:
  for i := 0 to aXMLDoc.childNodes.length-1 do
  begin
    if (aXMLDoc.childNodes[i].nodeTypeString = 'processinginstruction') then
    begin
      meOutput.Lines.Add(aXMLDoc.childNodes[i].xml);
    end;
  end;
zwar richtig alle PIs aus, allerdings ist der Output von aXMLDoc.childNodes[0].xml =
<?xml version="1.0"?> Wo ist mein Encoding-Element geblieben?

Danke für eure Hilfe und Gruß
  Mit Zitat antworten Zitat
marabu

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

Re: Wie komm ich an das Encoding-Element?

  Alt 2. Jun 2006, 10:25
Hallo Armin,

der MS Parser entfernt die encoding declaration beim Einlesen des Dokumentes und arbeitet intern grundsätzlich mit UCS-2. Ich glaube das ist sogar Standard.

Grüße vom marabu
  Mit Zitat antworten Zitat
Neuromancer

Registriert seit: 8. Aug 2003
62 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Wie komm ich an das Encoding-Element?

  Alt 2. Jun 2006, 10:27
Hallo Marabu,

danke für die Antwort.

Dann wird mir wohl nichts anderes übrig bleiben, als das Attribut wieder reinzupfriemeln.

Gruß
  Mit Zitat antworten Zitat
marabu

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

Re: Wie komm ich an das Encoding-Element?

  Alt 7. Jun 2006, 19:08
Hallo Armin,

es hat mir keine Ruhe gelassen. Klar steht im Platform-SDK, dass ein eventuell spezifiziertes encoding beim Parsen nach UCS-2 gewandelt wird und DOM-intern auch nur noch mit diesem encoding gearbeitet wird, aber es wäre doch schön, wenn man den Originalwert noch verfügbar hätte. Ich habe mir ein Beispiel an deiner Hartnäckigkeit genommen (du erinnerst dich?) und hier ist das Ergebnis:

Delphi-Quellcode:
function Encoding(doc: IXMLDOMDocument2): String;
var
  n: IXMLDOMNode;
begin
  with doc.firstChild as IXMLDOMProcessingInstruction do
  begin
    n := attributes.getNamedItem('encoding');
    if Assigned(n)
      then Result := n.nodeValue
      else Result := '';
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Neuromancer

Registriert seit: 8. Aug 2003
62 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Wie komm ich an das Encoding-Element?

  Alt 7. Jun 2006, 21:45
Hallo marabu,

danke, das ist sehr nett von dir.

Das Encoding-Problem hat mich - ehrlich gesagt - nicht allzusehr beschäftigt. Eine TStringList geladen, die erste Zeile gelöscht und eine Zeile mit dem Encoding-Element wieder reingepfriemelt - und das Problem war gelöst. Zugegeben nicht gerade sehr elegant, genügt aber meinen Ansprüchen vollkommen - und ich spare so sogar den Einsatz des Parsers...

Aber das hier:

n := attributes.getNamedItem('encoding'); ist schon sehr cool und wird bei mir ab morgen Anwendung finden, ersetzt es doch die in Delphi schmerzlich vermissten assoziativen Arrays - vorausgesetzt der Code tut das, was ich erwarte.

Danke nochmals und Gruß
  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 12:41 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