Wer zeigt mir den XPath?

J

Johnny Value

Aktives Mitglied
Thread Starter
Dabei seit
30.04.2004
Beiträge
149
Reaktionspunkte
5
Ich versuche seit ein paar Stunden, eine von mir aus iTunes als xml exportierte playlist per xsl als html table zu formatieren. Dabei verzweifle ich an der XPath Syntax (die mir zugegebenermassen neu ist). Ich habe jetzt drei oder vier Tutorials dazu durchgeguckt und mindestens ein halbes Dutzend iTunes xsl Dokumente ausprobiert. Trotzdem finde ich nicht den richtigen "Weg". Hier ist der Anfang meiner iTunes playlist

Code:
<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="Riffsammlung1.xsl"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Major Version</key><integer>1</integer>
	<key>Minor Version</key><integer>1</integer>
	<key>Application Version</key><string>6.0.1</string>
	<key>Features</key><integer>1</integer>
	<key>Music Folder</key><string>file://localhost/Volumes/Internal/iTunes%20Music/</string>
	<key>Library Persistent ID</key><string>CD2311D61B6357A7</string>
	<key>Tracks</key>
	<dict>
		<key>177</key>
		<dict>
			<key>Track ID</key><integer>177</integer>
			<key>Name</key><string>Kiss</string>
			<key>Artist</key><string>Prince</string>
			<key>Composer</key><string>Prince</string>

                        ... etc.

Hier ist meine erste Version eines xsl files:

Code:
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
	<title>Riffsammlung</title>
</head>

  <body>
    <h2>Die wichtigsten Gitarrenriffs</h2>
    <table border="1">
    <tr>
      <th align="left">Name</th>
      <th align="left">Artist</th>
    </tr>
    
    <xsl:for-each select="/plist/dict/dict/dict">
    <tr>
      <td><xsl:value-of select="key[text() = 'Name']"/></td>
      <td><xsl:value-of select="key[text() ='Artist']"/></td>
    </tr>
    </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

Kann mir jemand zeigen, wie ich statt 'Name' und 'Artist' den entsprechenden following-sibling da einbaue?

Vielen Dank im Voraus.

Johnny
 
Jetzt mal deinen Lerneifer außer acht gelassen:

Warum machst Du das nicht so:
Die Playlist als CSV speichern, mit einem Editor öffne, und jedes Komma durch "</td></tr>" und jedes Absatzzeichen mit "</td></tr>/n<tr><td>" zu ersetzen?

Dann noch das HTML-Gerüst drumbauen, fertig...
So würd ich das machen....
 
Naja, ich möchte am Ende höchstens 5-6 von den ganzen Angaben zu jedem Song auch in die table übernehmen. Das ginge vielleicht auch irgendwie mit regulären Ausdrücken, aber das wäre wahrscheinlich viel komplizierter und weniger flexibel.

Und dann ist da ja noch immer mein Lerneifer :)
 
Ok, en Lerneifer nochmal vollkommen ignoriert (man will ja auch ERgebnisse sehen ;) ):

Den ganzen Kram in Ecxel, die Spalten, die Du nicht haben willst löschen und dann in CSV...

Ein wenig komplizierter, ja, aber müsste gehen.

Aber Reguläre Ausdrücke sind auch toll zu lernen. Ich frag mich, warum ich das noch nicht getan hab....
 
Ich hab mich in meinem ganzen Leben noch nicht mit Excel befassen müssen. Werde das mal mit NeoOffice probieren. Trotzdem, die elegantere Lösung wäre xslt.

Ich war mal recht fit in regulären Ausdrücken. Aber wenn man das nicht dauernd benutzt, vergisst man es wieder. Frustrierend.

Jetzt muss ich aber arbeiten. Ich melde mich später wieder. Wenn inzwischen jemandem die korrekten XPaths einfallen sollten...

Gruß,
Johnny
 
Hats Du zufällig Zugang zu den WWDC 2004 oder 2005 Sessions? Da war ein schönes Beispiel genau für sowas dabei.

Alex
 
Die Videos kenne ich leider nicht. Aber nach endlosem Rumprobieren habe ich was gefunden, was funktioniert. Für alle, die es interessiert:

Code:
 <xsl:value-of select="child::key[text() ='Name']/following-sibling::*"/>
<xsl:value-of select="key[text() ='Artist']/following-sibling::* "/>

Die Logik (warum die wild card?) erschließt sich mir zwar nicht ganz, aber es geht. Super, jetzt kann ich auch XPath ;)

Johnny
 
Johnny Value schrieb:
Die Videos kenne ich leider nicht. Aber nach endlosem Rumprobieren habe ich was gefunden, was funktioniert. Für alle, die es interessiert:

Code:
 <xsl:value-of select="child::key[text() ='Name']/following-sibling::*"/>
<xsl:value-of select="key[text() ='Artist']/following-sibling::* "/>

Die Logik (warum die wild card?) erschließt sich mir zwar nicht ganz, aber es geht. Super, jetzt kann ich auch XPath ;)

Johnny
Wenn ich deine xml struktur richtig gelesen habe, willst du ja nicht auf den wert des elementes key zugreifen, was du oben versucht hast, sondern auf den wert des nächsten "Geschwisters", was du jezt machst. Das ist also schon logisch.
 
In der iTunes-Playlist alles Markieren, kopieren und in NeoOffice Calc eingefügen -> Tadaaaa!

Dann noch ein HTML daraus wurschteln...

Tobi
 
Zurück
Oben Unten