![]() |
Attribute ?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
nachdem ich mittlerweile das XML Tutorial von Chris auswendig kann (vorwärts wie rückwärts :roll: ) habe ich mit XML Dateien OHNE Attribute keinerlei Probleme mehr... Wenn ich jedoch eine XML Datei MIT Attributen habe komme ich einfach nicht weiter! Ich habe in einem Thread weiter unten eine Prozedur von Mathias Simmack verbessert bekommen (er war auch der Author dieser Prozedur ;) ) so das ich die XML Datei in einem TreeView darstellen kann. Klappt ja auch wunderbar, nur möchte ich gerne eine andere Darstellung haben! Als erstes hier einmal die XML Datei
XML-Code:
Ich hätte im TreeView nun gerne folgende Ansicht:
<?xml version="1.0" encoding="iso-8859-1" ?>
<LISTE> <Ordner name="Favoriten" hidden="0" locked="0"> <platz serviceID="0008" name="KLASSIK" onair="0085" /> <platz serviceID="000A" name="HIPHOP" onair="0085" /> <platz serviceID="000B" name="SOUL" onair="0085" /> <platz serviceID="002B" name="GROOVE" onair="0085" /> <platz serviceID="0009" name="MODERN" onair="0085" /> </Ordner> <Ordner name="Musik" hidden="0" locked="0"> <platz serviceID="0004" name="MTV Classic" onair="013E" /> <platz serviceID="6FEE" name="MTV HITS" onair="0001" /> <platz serviceID="6FF8" name="MTV HITS." onair="0001" /> <platz serviceID="6FF9" name="MTV Base." onair="0001" /> <platz serviceID="0006" name="MTV 1" onair="013E" /> <platz serviceID="6FF3" name="MTV 2" onair="0001" /> </Ordner> </LISTE> Ein Ordner mit der Bezeichnung "Favoriten" mit den unterordnern KLASSIK, HIPHOP, usw... Ein Ordner mit der Bezeichnung "Musik" mit den unterordnern MTV Classic, usw... Aktuell werden die Ordner genau so bennat wie es in der XML Datei steht, das heist mit allen Attributen usw. , und genau das will ich ja nicht! Ich habe de aktuelle Ansicht zum besseren verständniss mal angehängt! Gruß Bit P.S. Ich habe jetzt wirklich seit 2 Tagen einiges ausprobiert, zumal ich ja auch einige Anhaltspunkte genannt bekommen habe -> Erfolglos! Manchmal dauert es echt ewig bis mir ein Licht aufgeht... |
Re: Attribute ?
Hi,
das schöne an XPath (das mit den UNIX-Verzeichnissen aus dem Tutorial) ist, dass du selbst Attribute einbeziehen kannst. ;)
Delphi-Quellcode:
Ich hoffe damit kommst du schonmal ein Stück weiter. :)
sXPath := '/LISTE/Ordner[@name="Favoriten"]'; // sXPath: string;
xmlNodes := xmlDoc.selectNodes(sXPath); // xmlNodes: IXMLDOMNodeList Chris |
Re: Attribute ?
Grundsätzlich richtig, @Chakotay, aber ich würde die Attribut-Angabe nicht in eckige Klammern setzen, weil er dadurch ja nur den "Ordner" mit dem "name"-Attribut Favoriten findet. Sinnvoller wäre es, gleich auf die "name"-Attribute zu gehen:
Code:
Damit hast du, @Bitjuggler, gleich alle Namen, die du als Hauptknoten für deinen Tree-View benutzen kannst. Diesen Namen verwendest du dann auch als Vergleichswert um die untergeordneten "platz"-Knoten (bzw. deren "name"-Attribute) auszulesen. Du brauchst also min. zwei Variablen vom Typ IXMLDOMNodeList und zwei Schleifen. ;)
/LISTE/Ordner/@name
Wenn es noch tiefer gehen soll, dann kommst du IMHO besser weg wenn du die "GetThoseNodes"-Prozedur anpasst. |
Re: Attribute ?
Hi,
danke für die Tips aber anscheinend bin ich zu doof dazu... :gruebel: Eventuell fehlt mir auch noch etwas know-how in ObjectPascal, auf jeden Fall bekomme ich es nicht hin :( Ich werde noch einmal versuchen die Prozedur von Mathias umzuschreiben, und ansonsten versuche ich das ganze in ein paar wochen noch einmal! Jetzt heißt es ersteinmal : Object Pascal Sprachrefenrenz -> oder: lesen bis das Auge tränt... Tschüß und einen schönen Sonntag Bit |
Re: Attribute ?
Probier´s mal so:
Delphi-Quellcode:
Dann nach untergeordneten "platz"-Knoten suchen, und auch hier ist das "name"-Attribut wieder von besonderer Bedeutung:
nl := xmldoc.selectNodes('/LISTE/Ordner/@name');
if(nl.length > 0) then for i := 0 to nl.length - 1 do begin tn := TreeView1.Items.Add(nil,nl.item[i].text);
Delphi-Quellcode:
Aber das ist nur die simple Variante. Wie gesagt: wenn du noch "tiefer" in die XML-Struktur willst (sprich: evtl. noch andere Attribute im Tree-View darstellen), dann musst du sehen ob du mit einer angepassten Prozedur besser wegkommst.
subnl := xmldoc.selectNodes('/LISTE/Ordner[@name="' +
nl.item[i].text + '"]/platz/@name'); if(subnl.length > 0) then for j := 0 to subnl.length - 1 do TreeView1.Items.AddChild(tn,subnl.item[j].text); end; |
Re: Attribute ?
Hallo Mathias,
vielen Dank! Das liefert mir im TreeView genau die Ansicht die ich mir gewüncht habe. Nun hab ich endlich auch mal ein super Beispiel bekommen das es mir wohl in Zukunft erleichtern sollte wenn ich mal wieder XML Dateien mit Attribute bearbeiten muss! Gruß Bit |
Re: Attribute ?
Hm, wenn´s dir um Beispiele geht, dann bin ich mal so frei und verweise dich auf ein kleines Programm, das vielleicht nicht gerade das "Tool des Jahres" werden wird, das aber auch mit XML arbeitet:
![]() |
Re: Attribute ?
Danke, werde ich mir anschauen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 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