AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi XML Aenliche Datei auslesen und in TreeView laden
Thema durchsuchen
Ansicht
Themen-Optionen

XML Aenliche Datei auslesen und in TreeView laden

Ein Thema von lucius · begonnen am 17. Apr 2007 · letzter Beitrag vom 19. Apr 2007
Antwort Antwort
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#1

XML Aenliche Datei auslesen und in TreeView laden

  Alt 17. Apr 2007, 15:30
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: XML Aenliche Datei auslesen und in TreeView laden

  Alt 17. Apr 2007, 16:01
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;
Andreas
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: XML Aenliche Datei auslesen und in TreeView laden

  Alt 17. Apr 2007, 16:15
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:
raise Exception.Create(xmlDomDoc.parseError.reason); Ich denk mal das hat was mit Vista`s Zugriffsrechte zu tun.
Gruss Lucius
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: XML Aenliche Datei auslesen und in TreeView laden

  Alt 17. Apr 2007, 16:22
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:
xmlDomDoc.setProperty('NewParser', true); auskommentieren.
Wenn das nix hilft, dann
   xmlDomDoc.validateOnParse := False;
Andreas
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: XML Aenliche Datei auslesen und in TreeView laden

  Alt 17. Apr 2007, 17:23
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.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#6

Re: XML Aenliche Datei auslesen und in TreeView laden

  Alt 19. Apr 2007, 11:53
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
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: XML Aenliche Datei auslesen und in TreeView laden

  Alt 19. Apr 2007, 12:01
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.
  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 16:41 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