Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#7

Re: XML Werte auslesen und in Memo anzeigen?!

  Alt 30. Aug 2004, 08:51
@Computerbabalulu --

Was ich dazu sagen kann ist: Dein Ansatz ist mir etwas zu umständlich. Du hast eine Struktur wie die folgende:
XML-Code:
<Images Count="12">
  <Image1 ... />
  <Image2 ... />
  <Image3 ... />
  
</Images>
Das sieht nur auf den ersten Blick vorteilhaft aus. Da aber eine XML-Datei bspw. keine INI ist, bei der es in einer Sektion nur einen bestimmten Namen geben kann/darf, ist die Zählung überflüssig und erschwert IMHO sogar die Programmierung.

MSXML (eigentlich jeder XML-Parser) kennt so genannte XPath-Anfragen. Sieh´s vereinfacht betrachtet wie einen Datenbank-Query, mit dem du auf einen Schlag mehrere Informationen abfragen kannst. Würdest du auf die Zählung verzichten, würde dein Knoten wie folgt aussehen:
XML-Code:
<Images>
  <Image .../>
  <Image .../>
  <Image .../>
  
</Images>
Das ist absolut kein Problem, da sich die einzelnen Knoten nicht in die Quere (in das Query ) kommen. Notfalls hast du ja auch noch die "ID"-Attribute. Aber du hättest mit einer XPath-Abfrage wie
Delphi-Quellcode:
nl := xmldoc.selectNodes('/Data/Images/Image');
// var nl : IXMLDOMNodeList
alle <Image>-Knoten in einem Array, das du nun der Reihe nach durchlaufen kannst:
Delphi-Quellcode:
for i := 0 to nl.length - 1 do
begin
  { ... }
end;
Innerhalb dieser Schleife kannst du die Attribute abfragen, die dich interessieren; sprich: Bildname, Anzahl der Kopien, usw. Und wie man das macht, das findest du bspw. im Tutorial von Chakotay erklärt. Aber es müsste auch hier im Forum genug [dp="xml Attribute"]Ergebnisse[/dp] dazu geben.

Bei der Zählvariante von oben ist (ich sag´ mal) dummerweise auch jeder Knoten anders benannt. Das heißt: Man muss tatsächlich erst den Hauptknoten bzw. dessen "Count"-Attribut auslesen
Delphi-Quellcode:
node := xmldoc.selectSingleNode('/Data/Images/@Count'); // node = IXMLDOMNode
ShowMessage(node.text);
und dann muss man auf die gleiche Weise jeden einzelnen Knoten abfragen, wobei der Zählwert zu berücksichtigen ist, weil er im Namen steckt. Und das ist, meiner Ansicht nach, umständlich.

Zum Auflisten würde ich übrigens kein Memo sondern eher eine List-View verwenden.
  Mit Zitat antworten Zitat