AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Probleme beim Laden mit OmniXML
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme beim Laden mit OmniXML

Ein Thema von CalganX · begonnen am 12. Mai 2007 · letzter Beitrag vom 14. Mai 2007
Antwort Antwort
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

Probleme beim Laden mit OmniXML

  Alt 12. Mai 2007, 23:00
Hi,
ich habe im Moment arge Probleme mit dem Laden einer XML-Datei mit OmniXML. Ich lade mit meinem Code, den ich hier gepostet habe, die XML-Datei aus dem Internet herunter. Dazu sollte man sagen, dass die Datei im UTF-8-Format (also Unicode) abgespeichert ist und auch den entsprechenden Header hat.
Wenn die Daten angekommen sind, scheinen die auch richtig zu sein. Der Debugger sagt mir zumindest:
Code:
'<?xml version="1.0" encoding="UTF-8"?>'#$A'<cxupdate>'#$A#9'<project id="wpchanger" name="WallpaperChanger" page="http://blog.calganx.net/software/wpchanger/">'#$A#9#9'<version id="1.7.1" date="2006-08-13">'#$A#9#9#9'<changelog><![CDATA['#$A#9#9#9'Not available yet'#$A#9#9#9']]></changelog>'#$A#9#9'</version>'#$A#9#9'<version id="1.8" date="2007-05-06">'#$A#9#9#9'<changelog><![CDATA['#$A#9#9#9'<h1>WallpaperChanger V1.8</h1>'#$A'<ul>'#$A'[*][b]Fix:[/b] Problem mit Minimieren des Fensters behoben (Ticket #1)'#$A'[*][b]Feature:[/b] [i]CXUpdate[/i]-Anbindung.'#$A'[/list]'#$A#9#9#9']]></changelog>'#$A#9#9#9'<downloads>'#$A#9#9#9#9'<download id="0" downloadable="1" type="zip">http://blog.calganx.net/download/1</download>'#$A#9#9#9#9'<download id="1" downloadable="1" type="setup">http://blog.calganx.net/download/2</download>'#$A#9#9#9'</downloads>'#$A#9#9'</version>'#$A#9'</project>'#$A#9'<project id="infotunes" name="infoTunes" page="">'#$A#9'</project>'#$A#9'<project id="cxupdate" name="CXUpdate-Demo" page="http://trac.calganx.net/milestone/cxupdate.v01">'#$A#9#9'<version id="0.0" date="2007-05-01">'#$A#9#9#9'<changelog><![CDATA['#$A#9#9#9'Initial release'#$A#9#9#9']]></changelog>'#$A#9#9#9'<downloads>'#$A#9#9#9#9'<download id="0" downloadable="0">http://trac.calganx.net/browser/cxupdate/client/delphi/trunk</download>'#$A#9#9#9'</downloads>'#$A#9
#9'</version>'#$A#9#9'<version id="0.1" date="2007-05-12">'#$A#9#9#9'<changelog><![CDATA['#$A#9#9#9'2nd Beta release'#$A#9#9#9']]></changelog>'#$A#9#9'</version>'#$A#9#9'<version id="1.0" date="2007-08-13">'#$A#9#9#9'<changelog><![CDATA['#$A#9#9#9'Final release'#$A#9#9#9']]></changelog>'#$A#9#9'</version>'#$A#9'</project>'#$A'</cxupdate>'#$A#$10'Ú'#$12
Mein Code zum Laden der Datei in die OmniXML-Klasse sieht so aus:
Delphi-Quellcode:
var
  XmlString: WideString;
{...}
  // Stream mit XML-Daten erzeugen
  if (not Assigned(fXmlStream)) then
    fXmlStream := TMemoryStream.Create;
  XmlString := GetXMLString; // GetXMLString lädt die Datei aus dem Internet (siehe Link oben)
  fXmlStream.Write(XmlString, length(XmlString));

  // Datei aus Internet laden
  if (not fXmlParser.LoadFromStream(fXmlStream)) then
  begin
    raise EInOutError.Create('Datei konnte nicht geladen werden.');
    Exit;
  end;
Beim Laden erhalte ich nun konsequent eine Exception vom OmniXML (OmniXML.pas, Zeile 2769):
Zitat:
Erste Gelegenheit für Exception bei $7C812A5B. Exception-Klasse EXMLException mit Meldung 'A name contained an invalid character.'. Prozess CXUpdateDemo.exe (3640)
Scheinbar handelt es sich dabei um ein #0-Zeichen direkt am Anfang des Tags (zwischen < und dem Tagnamen).

Nun steht in den Supportforum, dass es Probleme beim Laden gibt, wenn das Encoding-Attribut angegeben wird. Ich habe jetzt den ganzen Block mit <?xml ... ?> herausgenommen, habe nur das Encoding herausgenommen, habe das Encoding verändert, ...
Nichts hilft. Er kann einfach nichts laden.

Hat jemand eine Idee, woran das liegen könnte? Es treibt mich langsam wirklich zur Weißglut.

Chris
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Probleme beim Laden mit OmniXML

  Alt 13. Mai 2007, 20:35
Ja, ich habe eine. Es klingt ganz nach einer UTF-16 kodierten Datei (also 2 Byte pro Zeichen). Nun weiss ich aber nicht, ob OmniXML MultiByte tauglich ist.
  Mit Zitat antworten Zitat
marabu

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

Re: Probleme beim Laden mit OmniXML

  Alt 14. Mai 2007, 10:34
Hallo Chris,

deine Funktion GetXMLString() könnte einer der Übeltäter sein. Du speicherst in dieser Funktion einen UTF-8 Datenstrom in einem WideChar-Buffer. OmniXML kann mit UTF-16 und UTF-8 umgehen, aber du solltest den Inhalt von XMLString mal im Debugger überprüfen. Es würde mich nicht wundern, wenn dort UTF-8 kodierte Zeichen drin stünden.

Freundliche Grüße
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Probleme beim Laden mit OmniXML

  Alt 14. Mai 2007, 17:06
Hi,
der XMLString-String, den mir der Debugger gibt, steht oben im Eingangspost. Speichere ich den String allerdings in einer Datei oder in einem FileStream, so ist das Ergebnis nur kryptisch. Nach einigen herum probieren, habe ich festgestellt, dass die Funktion tatsächlich nicht das tut, was sie soll. Ich bin jetzt vorübergehend auf eine externe Bibliothek umgestiegen, die auf die gleichen API-Calls zugreift, mit der es funktioniert.

Es war also kein Fehler von OmniXML, sondern von GetXmlString.

Chris
  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 07:56 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