![]() |
Wie komm ich an das Encoding-Element?
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:
Dann liest mir der folgende Code
<?xml version="1.0" encoding="ISO-8859-1"?>
<documentElement> ...Hier weitere Tags... </documentElement>
Delphi-Quellcode:
zwar richtig alle PIs aus, allerdings ist der Output von aXMLDoc.childNodes[0].xml =
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;
XML-Code:
Wo ist mein Encoding-Element geblieben?
<?xml version="1.0"?>
Danke für eure Hilfe und Gruß |
Re: Wie komm ich an das Encoding-Element?
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 |
Re: Wie komm ich an das Encoding-Element?
Hallo Marabu,
danke für die Antwort. Dann wird mir wohl nichts anderes übrig bleiben, als das Attribut wieder reinzupfriemeln. Gruß |
Re: Wie komm ich an das Encoding-Element?
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:
Grüße vom marabu
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; |
Re: Wie komm ich an das Encoding-Element?
Hallo marabu,
danke, das ist sehr nett von dir. :thumb: 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:
Delphi-Quellcode:
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.
n := attributes.getNamedItem('encoding');
Danke nochmals und Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 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