Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie Itunes Library auslesen (XML) (https://www.delphipraxis.net/160303-wie-itunes-library-auslesen-xml.html)

KahPee 6. Mai 2011 12:18


Wie Itunes Library auslesen (XML)
 
Hallo,

Itunes legt eine XML-Datei an in der die Informationen zu den Liedern enthalten sind. Dabei existiert zu jedem Lied ein Eintrag ähnlich dem folgenden.
Code:
<key>1924</key>
<dict>
 <key>Track ID</key>
 <integer>1924</integer>
 <key>Name</key>
 <string>Love the Way You Lie</string>
 <key>Artist</key>
 <string>Eminem & Rihanna</string>
 <key>Album Artist</key>
 <string>Eminem</string>
 <key>Album</key>
 <string>Recovery</string>
 <key>Genre</key>
 <string>Hip-Hop/Rap</string>
 <key>Kind</key>
 <string>Gekaufte AAC-Audiodatei</string>
 <key>Size</key>
 <integer>9423634</integer>
 ... hier folgen viele weitere Einträge
</dict>
Ich möchte aus dieser Liste nun bestimmte Informationen auslesen (z.B. Album, Artist,Titel). Wie mache ich das nun? es gibt ja keine Node "Artist", die ich anwählen kann. Über den Index, des Nodes kann ich ja auch nicht gehen. Denn wenn eine Info fehlt, dann fehlt auch der Eintrag und das ganze verschiebt sich. Ich müsste also immer den Index des "key"-nodes rauskriegen und dann den Inhalt des nachfolgenden Nodes?! Allerdings habe ich noch nicht viel mit XML gearbeitet. Wie sind die Befehle die ich dafür verwenden muss? Mit dem mir bekannten "selectsingleNode" geht das ja nicht..

Vielen Dank im Vorraus

Kahoee

Bernhard Geyer 6. Mai 2011 12:22

AW: Wie Itunes Libary auslesen (XML)
 
Wieso gehst du nich über die COM-Schnittstelle von iTunes?

himitsu 6. Mai 2011 12:23

AW: Wie Itunes Libary auslesen (XML)
 
Du liest den Index des gewünschten Keys aus und nimmst dann einfach den Wert des nachvolgenden Nodes (notfalls noch prüfen, ob das wirklich ein Value ist)

oder man suchst sich den gewünschten Key-Node und nimmt den nächsten Sibling-Node.


Teilweise ließe es sich mit XPath regeln.


Ansonsten kann ich nur eines sagen: Der Typ, welcher dieses entworfen hat, gehört erschossen.

KahPee 6. Mai 2011 12:30

AW: Wie Itunes Libary auslesen (XML)
 
Habe das bisher alles auf Basis des Tutorials von Christopher Harms gemacht. Wie sehe denn zum Beispiel eine Methode zum Anwählen eines bestimmten ChildNodes basierend auf dem Index aus?

Vielen Dank

Edit: Mit ItunesCom habe ich mich noch nicht beschäftigt. Hast du da nen Link zu einer Dokumentation oder so, sodass ich mir das angucken kann?

himitsu 6. Mai 2011 13:08

AW: Wie Itunes Libary auslesen (XML)
 
Zitat:

Zitat von KahPee (Beitrag 1099327)
Habe das bisher alles auf Basis des Tutorials von Christopher Harms gemacht. Wie sehe denn zum Beispiel eine Methode zum Anwählen eines bestimmten ChildNodes basierend auf dem Index aus?

Siehe Beitrag #8, dort drüben.

KahPee 6. Mai 2011 13:19

AW: Wie Itunes Libary auslesen (XML)
 
Ich hatte das jetzt so verstanden. Ich schreibe alle SubNodes des Nodes "dict",die den Namen "key" haben, in eine Nodelist.
Das geht ja über
Delphi-Quellcode:
Nodelist:=MainNode.SelectNodes('key');
anschließend gehe ich diese Liste durch und suche nach dem richtigen Wert:
Delphi-Quellcode:
for i:=0 to nodelist.length-1 do
begin
 if nodelist.item[i].text='Artist' then //bin nicht sicher ob man so auf den Wert zugreifen kann
  begin
    //hier muss nun auf den SubNode mit dem Index i*2+1 zugegriffen des Mainnodes (dict-Node) werden
  end;
end;
Wie macht man den Zugriff auf einen Subnode mit einem bestimmten Item. In Beitrag8 wird nur auf das Item in der Liste zugegrifften, die wiederum enthält bei mir aber nur Objekte mit dem Namen "key". Kann man auch eine Liste mit allen Subnodes erstellen?

Gruß KahPee

KahPee 6. Mai 2011 13:34

AW: Wie Itunes Libary auslesen (XML)
 
Ich habe die Lösung gefunden. Der Befehl den ich suche ist:
Delphi-Quellcode:
MainNode.childNodes.item[INDEX].text
Damit habe ich ja den gesuchten Zugriff auf einen Node unabhängig vom Namen!

KahPee


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 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