Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi unbekannte Knoten auslesen (https://www.delphipraxis.net/92007-unbekannte-knoten-auslesen.html)

zsoerenm 13. Mai 2007 11:21


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:
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;
In dem Array NAMES schreibt er alle namen der Knoten rein.
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

marabu 13. Mai 2007 12:03

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 Referenz zum Interface IXMLDOMNode zeigt dir die nötigen Informationen und auch im XML-Forum der DP findest du jede Menge Code.

Freundliche Grüße vom marabu

zsoerenm 13. Mai 2007 14:10

Re: unbekannte Knoten auslesen
 
Vielen dank schon mal...

ich hab nun ein weiteres Problem:
Christopher Harms benutzt dieses xml Document als beispiel:
XML-Code:
<?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>
und Hiermit schaut er ob alles korrekt ist:
Delphi-Quellcode:
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;
ich hab genau wie im tutotial MSXML2_TLB zu den uses hinzugefügt und xmldoc auf den Typ IXMLDOMDocument2 gesetzt.

Dennoch bekomm ich immer die Fehlermeldung, dass die XML-Datei nicht korrekt ist...
Was mach ich falsch?

marabu 13. Mai 2007 15:26

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:
 <?xml version="1.0" encoding="ISO-8859-1"?>
Vermutlich hast du das XML-Dokument mit Word oder einem anderen Textverarbeitungsprogramm angefasst, wobei die straight quotes zu typografischen Anführungszeichen gewandelt wurden.

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