Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML Aenliche Datei auslesen und in TreeView laden (https://www.delphipraxis.net/90440-xml-aenliche-datei-auslesen-und-treeview-laden.html)

lucius 17. Apr 2007 15:30


XML Aenliche Datei auslesen und in TreeView laden
 
Hallo Leute,

Ich moechte eine XML Datei auslesen und ausgeben in einem TreeView oder ListView, die XML ist folgendermasen aufgebaut:
Zitat:

<nzb>
|
|------<file>
| |
| |------<groups>
| | |
| | |------<group>
| |
| |------<segments>
| |
| |------<segment>
| |------<segment>
| |------<segment>
|
|------<file>
| |
| |------<groups>
| | |
| | |------<group>
| |
| |------<segments>
| |
| |------<segment>
Folgender Code benutze Ich, wobei er schon bei dem Wort file anfaengt zu mekkern.
Delphi 7 sieht das Wort 'file' als ein code, wie verhindere Ich das?
Delphi-Quellcode:
var
  xmlDomdoc : DomDocument60;
  file, anwendung : IXMLDomNodelist;
  Node, subNode : IXMLDomNode;
  tv : TTreeNode;
  i, j : integer;
begin

xmlDomDoc := CoDomDocument60.Create;
xmlDomDoc.setProperty('NewParser', true);
xmlDomDoc.load('i:\Test\alone in the dark.xml');

TreeView.Items.BeginUpdate;
  TreeView.Items.Clear;

  file:= xmlDomDoc.documentElement.selectNodes('file'); <--------- hier gehts schon schief.
  groups:= xmlDomDoc.documentElement.selectNodes('file/groups');

  for i:= 0 to file.length - 1 do
  begin
    Node := file.item[i].selectSingleNode(group);
    tv  := TreeView.Items.Add(nil, Node.text);

    if(Node.childNodes.length > 0) then
      for j := 0 to Node.childNodes.length - 1 do
        begin
          subNode := file.item[i].selectSingleNode(segments/segment);
          TreeView.Items.AddChild(tv, subNode.text);
        end;
    end;

  TreeView.Items.EndUpdate;

end;
Schonmal Recht Herzlichen Dank.

Gruss Lucius.

shmia 17. Apr 2007 16:01

Re: XML Aenliche Datei auslesen und in TreeView laden
 
Zitat:

Zitat von lucius
Delphi 7 sieht das Wort 'file' als ein code, wie verhindere Ich das?

Nenne die Variable FileNodeList oder FileNodes (Mehrzahl).
Ausserdem solltest du Folgendes ändern:
Delphi-Quellcode:
   if not xmlDomDoc.load('i:\Test\alone in the dark.xml') then
   begin
      raise Exception.Create(xmlDomDoc.parseError.reason);
   end;

lucius 17. Apr 2007 16:15

Re: XML Aenliche Datei auslesen und in TreeView laden
 
Hi shmia,

danke fuer den Ansatz.
Habe die Variable umbenannt nach FileNodes und Exception eingebaut.
Jetzt bekomme Ich die Exception: 'DTD nicht erlaubt' bei der Zeile:
Delphi-Quellcode:
raise Exception.Create(xmlDomDoc.parseError.reason);
Ich denk mal das hat was mit Vista`s Zugriffsrechte zu tun.
Gruss Lucius

shmia 17. Apr 2007 16:22

Re: XML Aenliche Datei auslesen und in TreeView laden
 
Zitat:

Zitat von lucius
Jetzt bekomme Ich die Exception: 'DTD nicht erlaubt'

Das könnte daran liegen, dass die XML-Datei entweder nicht richtig aufgebaut ist oder du solltest folgende Zeile:
Delphi-Quellcode:
xmlDomDoc.setProperty('NewParser', true);
auskommentieren.
Wenn das nix hilft, dann
Delphi-Quellcode:
   xmlDomDoc.validateOnParse := False;

lucius 17. Apr 2007 17:23

Re: XML Aenliche Datei auslesen und in TreeView laden
 
Ich denke mal es liegt am Aufbau der XML.
Etwas stimmt in den Code nicht.
Neuer code:
Delphi-Quellcode:
var
  xmlDomdoc : DomDocument60;
  filenodes, groups : IXMLDomNodelist;
  Node, subNode : IXMLDomNode;
  tv : TTreeNode;
  i, j : integer;
begin
xmlDomDoc := CoDomDocument60.Create;
xmlDomDoc.validateOnParse := false;

if not xmlDomDoc.load('i:\Test\alone in the dark.xml') then
 begin
   raise Exception.Create(xmlDomDoc.parseError.reason);
 end;

TreeView.Items.BeginUpdate;
  TreeView.Items.Clear;

  filenodes := xmlDomDoc.documentElement.selectNodes('file');
  groups := xmlDomDoc.documentElement.selectNodes('file/groups');

  for i:= 0 to filenodes.length - 1 do
  begin
    Node := filenodes.item[i].selectSingleNode('groups');
    tv  := TreeView.Items.Add(nil, Node.text);

    if(Node.childNodes.length > 0) then
      for j := 0 to Node.childNodes.length - 1 do
        begin
          subNode := filenodes.item[i].selectSingleNode('groups/segments');
          TreeView.Items.AddChild(tv, subNode.text);
        end;
    end;

  TreeView.Items.EndUpdate;

end;
Gruss Lucius.

xZise 19. Apr 2007 11:53

Re: XML Aenliche Datei auslesen und in TreeView laden
 
Zeig doch mal deine XML-Datei... Oder ein Muster? Damit klar ist, warum der Parser meckert...

Und was stimmt mit dem Code nicht...
Zitat:

Mein Glaskugel ist gerade in Reperatur

lucius 19. Apr 2007 12:01

Re: XML Aenliche Datei auslesen und in TreeView laden
 
Hi XZise,

hier ein Ausschnitt einer NZB:
Zitat:

<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE nzb PUBLIC "-//newzBin//DTD NZB 1.0//EN" "http://www.newzbin.com/DTD/nzb/nzb-1.0.dtd">

<nzb xmlns="http://www.newzbin.com/DTD/2003/nzb">

<file poster="Yenc@power-post.org (Yenc-PP-A&amp;A)" date="1169166168" subject="(brander5571 )
[00/29] - &quot;brander5571.nzb&quot; yEnc (1/1)">

--<groups><group>alt.binaries.comp</group></groups>

--<segments>

----<segment bytes="247819" number="1">45b00f55$0$6492$2e0edba0@news.tweakdsl. nl</segment>

--</segments>

</file>
MFG Lucius.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 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