Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Problem mit XML Turtoial von Chack (https://www.delphipraxis.net/19464-problem-mit-xml-turtoial-von-chack.html)

citybreaker 3. Apr 2004 20:02


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:
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.
Jetzt kommt beim Start immer die Fehlermeldung mit "nicht korrekter Xml Datei"
Woran liegt das? Hab die Datei im selben Ordner wie die Exe.

Mirilin 3. Apr 2004 20:17

Re: Problem mit XML Turtoial von Chack
 
:hi:

Keine Ahnug, aber bei mir hat er beim ISO-Typ gemeckert.

Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
so hat IE nicht mehr gemeckert.


mfg Tobias

MathiasSimmack 3. Apr 2004 20:29

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:
<?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>
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.

@citybreaker: Kleiner Tipp für bessere Fehlermeldungen. Ändere mal deine Infobox wie folgt ab:
Delphi-Quellcode:
    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);
dann siehst du was los ist. ;)

Mirilin 3. Apr 2004 20:31

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

MathiasSimmack 3. Apr 2004 20:41

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. ;)

MathiasSimmack 3. Apr 2004 20:43

Re: Problem mit XML Turtoial von Chack
 
Übrigens:
Zitat:

Zitat von citybreaker
<movieorganiezer>

Gesundheit. :mrgreen:

citybreaker 4. Apr 2004 09:25

Re: Problem mit XML Turtoial von Chack
 
Zitat:

Zitat von Mirilin
: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

Jetzt klappt es. Danke! Hab mich wohl böse verschrieben. :coder:
Nun gib es noch das Problem das igendwie nix geladen wird was in der XML Datei steht.
Code zum laden steht oben.

CalganX 4. Apr 2004 10:51

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

citybreaker 4. Apr 2004 11:04

Re: Problem mit XML Turtoial von Chack
 
Joa, hab ich gemacht.

Delphi-Quellcode:
procedure TMainFrm.FormCreate(Sender: TObject);
begin
  fAppPath := ExtractFilePath(Application.Exename);
  ...
end;

CalganX 4. Apr 2004 11:30

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 06:50 Uhr.
Seite 1 von 4  1 23     Letzte »    

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