![]() |
unbekannte Knoten auslesen
Hallo
Ich bin noch ein Anfänger im bereich des Programmierens. Ich hab mir das Tutorial von Christopher Harms zu MSXML durchgelesen. In seinem Beispiel zum auslesen eines XML Dokuments schreibt er dies:
Delphi-Quellcode:
In dem Array NAMES schreibt er alle namen der Knoten rein.
procedure TMainForm.UpdateList;
const NAMES: array[0..8] of string = ('name', 'format', 'ton', 'anzmedien', 'bildqualitaet', 'tonqualitaet', 'gesamt', 'verliehen', 'comment'); // siehe I var movies: IXMLDOMNodeList; // wird alle Filme (die Pakete) enthalten subNode: IXMLDOMNode; // enthält eine Node i, j: integer; // Laufvariablen begin MovieList.Items.Clear; // leeren der MovieList MovieList.Items.BeginUpdate; movies := xmlDoc.documentElement.selectNodes('movie'); // siehe II for i:=0 to movies.length – 1 do begin subNode := movies.item[i].selectSingleNode('id'); // siehe III MovieList.Items.Add; MovieList.Items[i].Caption := subNode.Text; // siehe IV with MovieList.Items[i].SubItems do begin for j:=0 to length(NAMES)-1 do begin // siehe V subNode := movies.item[i].selectSingleNode(NAMES[j]); // -"- -"- if subNode <> nil then // siehe VI Add(subNode.Text) // -"- -"- else Add(''); end; end; end; MovieList.Items.EndUpdate; end; Mein Problem ist, dass ich die aber nicht kenne, da es bei meinem xml dokument verschieden viele Knoten sein können. Kann man irgendwie auslesen wieviel Knoten vorhanden sind und welche Namen die haben? Hoffe ihr versteht mich. Gruß Sören |
Re: unbekannte Knoten auslesen
Herzlich willkommen in der Delphi-PRAXiS, Sören.
documentElement.childNodes ist auch eine NodeList und mit der kannst du arbeiten ohne die Namen der SubNodes zu kennen. Ein Blick in die ![]() Freundliche Grüße vom marabu |
Re: unbekannte Knoten auslesen
Vielen dank schon mal...
ich hab nun ein weiteres Problem: Christopher Harms benutzt dieses xml Document als beispiel:
XML-Code:
und Hiermit schaut er ob alles korrekt ist:
<?xml version=“1.0“ encoding=“ISO-8859-1“?>
<movieorganizer> <movie> <id>1</id> <name>Der Schuh des Manitu</name> <format>DVD</format> <ton>DD5.1</ton> <anzmedien>2</anzmedien> <bildqualitaet>1+</bildqualitaet> <tonqualitaet>1</tonqualitaet> <gesamt>1+</gesamt> <verliehen>lol</verliehen> <comment>Lustige Komoedie mit Bully.</comment> <screenshot /> </movie> </movieorganizer>
Delphi-Quellcode:
ich hab genau wie im tutotial MSXML2_TLB zu den uses hinzugefügt und xmldoc auf den Typ IXMLDOMDocument2 gesetzt.
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"?><movieorganizer></movieorganizer>'); end else xmlDoc.load(fAppPath + DATABASE_FNAME); if xmlDoc.parseError.errorCode <> 0 then begin MessageDlg('Die XML-Datei ist nicht korrekt!' + #13#10 +'Der MovieOrganizer wird nun beendet.', mtError, [mbOK], 0); Application.Terminate; end; Dennoch bekomm ich immer die Fehlermeldung, dass die XML-Datei nicht korrekt ist... Was mach ich falsch? |
Re: unbekannte Knoten auslesen
Hallo Sören,
du musst auf die Feinheiten achten - deine Quotes in der XML-Deklaration sind die falschen. Übrigens: Wenn du eine XML-Datei in deinem Browser öffnest, dann erhältst du einen ziemlich genauen Hinweis darauf was nicht stimmt. So muss es aussehen:
XML-Code:
Vermutlich hast du das XML-Dokument mit Word oder einem anderen Textverarbeitungsprogramm angefasst, wobei die straight quotes zu typografischen Anführungszeichen gewandelt wurden.
<?xml version="1.0" encoding="ISO-8859-1"?>
Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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