Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#5

Re: TidHTTP.Get um TXMLDocument zu füllen

  Alt 13. Jan 2010, 16:53
Hallo,
Zitat von himitsu:
Zitat von nahpets:
Der IE kann die XML-Seite problemlos einlesen, so dass ich mal von einem korrekten XML ausgehe.
Der IE ist kein XML Parser.
Da viele HTML-Seiten total mit Fehlern gefüllt sind, arbeiten HTML-Parser fehlerresistent und versuchen vieles "irgendwie" dennoch auszuwerten und anzuzeigen.

XML-Parser arbeiten da strickter ... was eigentlich nicht schlimm ist, da XML "streng" geregelte Regeln/Spezifikationen besitzt.

$A0 ist kein UTF-8-Zeichen, also wird der Fehler korrekt angezeigt.


Die genannte XML-Datei ( http://www.google.com/ig/api?weather...+Germany&hl=de ) besitzt keinen XML-Header und ohne sollte es laut XML-Spec UTF-8 sein, aber hier sieht es mehr nach ANSI aus.

Lösung: entweder nach UTF-8 konvertieren, bevor du es an TXMLDocument übergibst
oder du setzt einen XML-Header (XMLInstructionNode) davor, welcher was von ANSI sagt.



PS: Geh über den Stream, denn sonst bekommst du ab D2009 Probleme.
aktuell (bis D2007) könnte man es so versuchen
XMLDoc.XML.Text := '<?xml version="1.0" encoding="ISO-8859-1"?>' + IdHTTP1.Get(Trim(edURL.Text)); aber besser kommst du, du downloadest die Datei in einen Stream,
fügst vor den Dateidaten das '<?xml version="1.0" encoding="ISO-8859-1"?>' ein (natürlich als ANSI)
und nutzt dann LoadFromStream.

PSS: genau wegen sowas kann man bei himXML auch einen "Default"-Kodierung angeben ... also wenn die "angegebene" Kodierung nicht mit der tatsächlichen Kodierung übereinstimmt.
Stimmt, der IE selbst ist kein Parser, er benutzt den von Microsoft.
Bisher hat er mir noch keine XML-Datei angezeigt, die einen Fehler enthielt. Bei XML geht er anders vor als bei HTML, bei HTML darf geschludert werden, bei XML nicht.

Die Datei von Google enthält am Anfang die 3 typischen Bytes für UTF-8-Dateien, auch wenn es nicht nochmal explizit woanders steht. Das mag auch ein Problem sein. Ultraedit erkennt die Datei jedenfalls als UTF-8, zumindest dann, wenn man beim IE sagt: "Quelltext anzeigen". Will' nicht ausschließen, dass es erst dann UTF-8 wird.

Nagut: Wenn man die Datei per Indy holt, ist es ganz eindeutig kein UTF-8, aber die Hex A0 vor dem Prozentzeichen bleibt.
  Mit Zitat antworten Zitat