![]() |
Problem mit XML Turtoial von Chack
So hier der 3. Thread zu dem Tutorial.
Ich meine XML Datei folgendermaßen aufgebaut. movies.xml <?xml version="1.0" encoding="ISO-8895-1"?> <movieorganiezer> <movie> <id>1</id> <name>Der Schuh des Manitu</name> <format>DVD</format> <ton>DD5.1</ton> </movie> </movieorganiezer> Und dann noch folgende Source.
Delphi-Quellcode:
Jetzt kommt beim Start immer die Fehlermeldung mit "nicht korrekter Xml Datei"
unit main;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Menus, msxml2_tlb; type TMainFrm = class(TForm) MainMenu1: TMainMenu; Datei1: TMenuItem; Beenden1: TMenuItem; Film1: TMenuItem; Hinzufgen1: TMenuItem; Entfernen1: TMenuItem; N1: TMenuItem; Bearbeiten1: TMenuItem; N2: TMenuItem; Info1: TMenuItem; StatusBar1: TStatusBar; MovieList: TListView; procedure FormCreate(Sender: TObject); procedure UpdateList; private { Private-Deklarationen } public { Public-Deklarationen } fAppPath: string; end; const DATABASE_FNAME ='movies.xml'; var MainFrm: TMainFrm; xmlDoc: IXMLDOMDocument2; implementation {$R *.DFM} procedure TMainFrm.FormCreate(Sender: TObject); begin fAppPath := ExtractFilePath(Application.Exename); XmlDoc := CoDomDocument40.Create; XmlDoc.SetProperty('NewParser', true); if not FileExists(fAppPath + DATABASE_FNAME) then begin XmlDoc.loadXml('<?xml version="1.0"?><movieorganiezer></movieorganiezer>'); end else XmlDoc.load(fAppPath + DATABASE_FNAME); if XmlDoc.parseError.errorCode <> 0 then begin MessageDlg('Die XML Datei ist nicht korrekt!' + #13#10 +'Das Programm wird nun beenden!', mtError, [MbOk], 0); Application.Terminate; end; if XmlDoc.documentElement.nodeName <> 'movieorganiezer' then Application.Terminate; end; procedure TMainFrm.UpdateList; const NAMES: array[0..2] of string = ('name', 'format', 'ton'); var movies: IXMLDOMNodeList; subNode: IXMLDOMNode; i, j: integer; begin MovieList.Items.Clear; MovieList.Items.BeginUpdate; movies := xmlDoc.documentElement.selectNodes('movie'); for i:=0 to movies.length - 1 do begin subNode := movies.item[i].selectSingleNode('id'); MovieList.Items.Add; MovieList.Items[i].Caption := subnode.text; with Movielist.Items[i].SubItems do begin for j:=0 to length(NAMES[-1]) do begin subNode := movies.item[i].selectSingleNode(Names[j]); if subNode <> nil then Add(subNode.text) else Add(''); end; end; end; MovieList.items.endupdate; end; end. Woran liegt das? Hab die Datei im selben Ordner wie die Exe. |
Re: Problem mit XML Turtoial von Chack
:hi:
Keine Ahnug, aber bei mir hat er beim ISO-Typ gemeckert.
Code:
so hat IE nicht mehr gemeckert.
<?xml version="1.0" encoding="ISO-8859-1" ?>
mfg Tobias |
Re: Problem mit XML Turtoial von Chack
@Mirilin: Das Leerzeichen spielt keine Rolle. Ich habe selbst auch eine Datei, die verkürzt so aussieht:
Code:
und da stört sich der IE auch nicht dran. Das Problem liegt anderswo. Wobei ich natürlich sagen muss, dass ich die selbe Fehlermeldung bekam. Da aber, wie gesagt, eine meiner Dateien die gleiche Kodierung hat, kann´s nicht am Leerzeichen liegen.
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="archiv.xsl" type="text/xsl"?> <!DOCTYPE archiv SYSTEM "archiv.dtd"> <archiv sig="2004" shortname="2004-04" name="April"> <day name="3. April 2004">...</day> </archiv> @citybreaker: Kleiner Tipp für bessere Fehlermeldungen. Ändere mal deine Infobox wie folgt ab:
Delphi-Quellcode:
dann siehst du was los ist. ;)
MessageDlg(Format('Fehler %s in Zeile %d, Position %d:' + #13#10 +
'%s',[xmldoc.parseError.reason,xmldoc.parseError.line, xmldoc.parseError.linepos,xmldoc.parseError.srcText]), mtError,[mbok],0); |
Re: Problem mit XML Turtoial von Chack
:hi:
@Mathias Bei mir waren es nicht Leerzeichen sonder die 5 und die 9 die an verschienden Plätzen lagen. ISO-8859-1 vs ISO-8895-1 mfg Tobias |
Re: Problem mit XML Turtoial von Chack
Hey, du hast recht. Ich sollte vielleicht mal meine Augen aufmachen. Wird hiermit getan: :shock:
Entschuldige, ich nehme alles zurück. ;) |
Re: Problem mit XML Turtoial von Chack
Übrigens:
Zitat:
|
Re: Problem mit XML Turtoial von Chack
Zitat:
Nun gib es noch das Problem das igendwie nix geladen wird was in der XML Datei steht. Code zum laden steht oben. |
Re: Problem mit XML Turtoial von Chack
Hi,
hast du denn überhaupt fAppPath einen Wert zugewiesen? Das müsste eigentlich das Verzeichnis der Anwendung sein... Chris |
Re: Problem mit XML Turtoial von Chack
Joa, hab ich gemacht.
Delphi-Quellcode:
procedure TMainFrm.FormCreate(Sender: TObject);
begin fAppPath := ExtractFilePath(Application.Exename); ... end; |
Re: Problem mit XML Turtoial von Chack
Hi,
stimmt... :wall: Aber hast du denn irgendwo UpdateList aufgerufen? Ich find in deinem Quelltext nix davon. ;) Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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 by Thomas Breitkreuz