itunes Albumliste-Deutsche

Want create site? Find Free WordPress Themes and plugins.

Movable Type Scripts


XSLT-Skript, um eine Liste der Alben im iTunes XML generieren

Wenn ich einen iPod besitzen, fand ich die gedruckte Liste aus dem iTunes – Programm verfügbar ist , nicht zu groß (obwohl die bemerkenswerte interaktive Schnittstelle), und ich konnte nicht eine Liste der kurze Zusammenfassung der album.Sejak iTunes Store als XML – Bibliothek bekommen, ich XSLT verwenden , um Listen zu erstellen das ist mehr nach meinem Geschmack. Weil ich auf dem Album zu hören sind in der Regel als die einzige, wollte ich das Album Liste nach Genre gruppiert.

Um dieses Skript zu verwenden, speichern albumList.xml und albumList.xsl unten an deine Eigene Musik / iTunes – Ordner angezeigt, und albumList.xml offen in Internet Explorer 6 oder höher oder Mozilla Firefox (IE5 nicht funktionieren würde, ich habe keine anderen Browsern getestet) .

“Liste der Property ‘iTunes XML

Die iTunes – Bibliothek wird als XML in einer Datei gespeichert iTunes Music Library.xml genannt. Mit der XML – Sprache allgemein als eine Liste von Eigenschaften bekannt ist , oder plist, die Informationen als Schlüssel / Wert – Paare enthält. Nicht dafür ausgelegt, den Song zu veranschaulichen, kann verwendet werden, um die Art von mehr oder weniger etwas zu beschreiben. Dies ist, wie die XML aussieht:

 <Plist version = "1.0"?>
   <Dict>
     <Key> Titel </ key>
     <Dict>
       <Key> 638 </ key>
       <Dict>
         <Key> Track ID </ key> <integer> 638 </ integer>
         <Key> Name </ key> <string> Take Me To The River </ string>
         <Key> Künstler </ key> <string> Talking Heads </ string>
         <Key> Komponist </ key> <string> Al Green & # 38;  M. Hodges </ string>
         <Key> Album </ key> <string> Stop Making Sense </ string>
         <Key> Genre </ key> <string> Alternative & # 38;  Punk </ string>
         ... Etc ...
       </ Dict>
     </ Dict>
   </ Dict>
 </ Plist>

Das bedeutet, dass, um, sagen wir, der Name des Albums zu finden, müssen wir es unmittelbar vor dem aus dem “Album” mit Ihnen überein:

string [vorher Schwester :: Taste [1] = ‘Album’]

Das heißt, das Element, an dem das erste Element in der vorherigen Achse und Schwestern einen Wert von “Album” haben.

Zwar ist dies eine bequeme allgemeinen XML-Sprache ist, ist es auf jeden Fall komplexer XML-Sprache, um die Titelliste zu repräsentieren angepasst zu manipulieren, so dass für einen tiefen Atemzug nehmen, was folgt!

Erste Liste der Alben

ITunes XML ist eine Liste von Songs. Album-Tracks erscheinen auf nichts mehr, wirklich, als die Attribute des Songs, so dass der einfachste Ansatz wird den Albumnamen für jeden Song geben, sobald die auf ihm erscheint. So eine Liste der richtigen Album zu bekommen, habe ich einen ziemlich cleveren Trick zur Verfügung mit diesen Elementen und Schlüssel () und generate -id () Funktion.

andere haben die Verwendung von besser beschrieben dann könnte ich, aber kurz, hier Elemente einer Liste von Knoten Aufbau der Song repräsentiert. Das Element wählt dann (dh Songs) Elemente, bei denen id automatisch entsprechend id automatisch von dem ersten Knoten erzeugt durch Tasten () Funktion zurückgegeben. Nein, es machte mich auf den Kopf drehen, auch. Sheet generiert eine Liste der Alben (mit verwandten Künstler) zu erhalten sind:

 <Xsl: key name = "songsByAlbum" match = "dict"
   verwenden = "string [preceding-sibling :: Taste [1] = 'Album']" />

 <Xsl: template match = "/ plist / dict / dict">
   <Html>
     <Body>
       <Table>

         <Xsl: for-each select = "dict [generate-id = (.)
             generate-id (Schlüssel ( 'songsByAlbum', string) [1])] ">
           <Xsl: sort select = "string [preceding-sibling :: Taste [1] = 'Album']" />
           <Tr>
             <Td> <xsl: value-of select = "string [preceding-sibling :: Taste [1] = 'Album']" /> </ td>
             <Td> <xsl: value-of select = "string [preceding-sibling :: Taste [1] = 'Artist']" /> </ td>
           </ Tr>
         </ Xsl: for-each>

       </ Table>
     </ Body>
   </ Html>
 </ Xsl: template> 

Es hat Probleme mit der Erstellung, though. Es wird dauern, wer der erste Song aus der Sammlung des Künstlers, die ein bisschen komisch aussieht. Um dies zu beheben, verwende ich ‘Teil einer Compilation “Flagge wie folgt:

 <Xsl: key name = "songsByAlbum" match = "dict"
   verwenden = "string [preceding-sibling :: Taste [1] = 'Album']" />

 <Xsl: template match = "/ plist / dict / dict">
   <Html>
     <Body>
       <Table>

         <Xsl: for-each select = "dict [generate-id = generate-id (Schlüssel ( 'Alben', string) [1]) (.)]">
           <Xsl: sort select = "string [preceding-sibling :: Taste [1] = 'Album']" />
           <Tr>
             <Td> <xsl: call-template name = "Albumname" /> </ td>
             <Td> <xsl: call-template name = "Künstlername" /> </ td>
           </ Tr>
         </ Xsl: for-each>

       </ Table>
     </ Body>
   </ Html>
 </ Xsl: template>

 <Xsl: template name = "Albumname">
   <Xsl: value-of select = "string [preceding-sibling :: Taste [1] = 'Album']" />
 </ Xsl: template>

 <Xsl: template name = "Künstlername">
   <Xsl: choose>
     <Xsl: when test = "true [preceding-sibling :: Taste [1] = 'Compilation']">
       <I> Compilation </ i>
     </ Xsl: when>
     <Xsl: otherwise>
       <Xsl: value-of select = "string [preceding-sibling :: Taste [1] = 'Artist']" />
     </ Xsl: otherwise>
   </ Xsl: choose>
 </ Xsl: template> 

Ich habe die Hauptvorlage in eine separate Vorlage für das Album und Künstler aufgeschlüsselt – XSLT schwierig sein kann, zu den besten Zeiten zu folgen, so möchte ich modularisieren Vorlage so viel wie ich kann.

Liste der Alben werden nach Genres gruppiert

Das Problem mit dieser Liste ist die Art, wie die Musik alle zusammen püriert. Ich weiß wirklich nicht , wie Matthäus mit Leidenschaft reiben Schultern mit Stop Making Sense.

Für Gruppen von Alben mit dem Genre, verwende ich eine Technik, entworfen von Steve Muench, Oracle XML Technical Evangelist “, der den Spitznamen” Gruppierung Muench “.

Wieder andere haben erklärt dies besser als ich kann, so genügt zu sagen, dass die Verwendung Funktionen generate-id (), um XSL auf Songs nach Genre und Album definiert (wenn Sie den Vorgang XSL versuchen wollen folgen), und die der Punkt , in dem die Vorlage albumsInGenre das erste Lied , in jedem Genre genannt wird , ist der aktuelle Kontext.

In albumsInGenre Vorlage, die gleiche Technik verwendet , um das erste Lied in jedem Album zu erhalten, den Namen des Albums und dem Künstler zu bekommen. Ich benutze auch zusätzliche Prädikate zur Weiterentwicklung dieses Knotenmenge verfeinern, um das Genre als Parameter an die Vorlage übergeben.

( Das Leben wäre einfacher , mit XSLT 2.0 wird für-jeden-Gruppenelement).

Sheet sieht wie folgt aus:

 <Xsl: key name = "songsByAlbum" match = "dict" use = "string [preceding-sibling :: Taste [1] = 'Album']" /> <xsl: key name = "songsByGenre" match = "dict" verwenden = "string [preceding-sibling :: Taste [1] = 'Genre']" /> <xsl: template match = "/ plist / dict / dict"> <html> <body> <table> <xsl: for -jeder select = "dict [generate-id = generate-id (Schlüssel ( 'songsByGenre', string) [1]) (.)]"> <xsl: sort select = "string [preceding-sibling :: key [1 ] = 'Genre'] "/> <xsl: for-each select =" Taste ( 'songsByGenre', string) [1] "> <xsl: call-template name =" albumsInGenre "> <xsl: with-param name = "Genre" select = "string [preceding-sibling :: Taste [1] = 'Genre']" /> </ xsl: call-template> </ xsl: for-each> </ xsl: for-each> </ table> </ body> </ html> </ xsl: template> <xsl: template name = "albumsInGenre"> <xsl: param name = "Genre" /> <tr> <td colspan = "3"> <b> <xsl: value-of select = "$ genre" /> </ b> </ td> </ tr> <xsl: variable name = "Song" wählen = "/ plist / dict / dict / dict" /> <xsl: for-each = "$ Song auswählen [generate-id = generate-id (Schlüssel ( 'songsByAlbum', string [preceding-sibling :: Taste [1] = 'Album']) [1 (.) ])] "> <xsl: sort select =" string [preceding-sibling :: Taste [1] = 'Album'] "/> <xsl: for-each select =" Taste ( 'songsByAlbum', string [preceding- Geschwister :: key [1] = 'Album']) [string [preceding-sibling :: key [1] 'Genre' =] = $ genre] [1] "> <tr> <td> </ td> < td> <xsl: call-template name = "Albumname" /> </ td> <td> <xsl: call-template name = "Künstlername" /> </ td> </ tr> </ xsl: for-each > </ xsl: for-each> </ xsl: template>

Und die daraus resultierende Album Liste wie folgt aussieht:

Dance / Electronica
Autobahn St. Germain
Dehli9 tosca
an Land Brian Eno
Jazz
Madar Januar Garbarek
Die Hot Fives & Sevens Louis Armstrong & The Hot Five

Wenn Sie nur das Album auf dem iPod wollen, nicht alle Alben in der iTunes-Bibliothek, dann muss die Bedingung der Extras zu den meisten hinzugefügt werden, für ein, so dass es:

 <Xsl: for-each select = "Taste ( 'songsByAlbum', string [preceding-sibling :: Taste [1] = 'Album'])
         [String [preceding-sibling :: Taste [1] = 'Genre'] = $ Genre]
         [Nicht (true [preceding-sibling :: Taste [1] = "Deaktiviert"])] [1] "> 

Hinzufügen von Zeitspur

Nachdem so weit gekommen ist, möchte ich die Dauer jedes Album zu sehen. Die Dauer der einzelnen Songs gespeichert (in Millisekunden) an Gesamtzeitsperre, so dass die Vorlage , dies zu tun ist:

 <Xsl: template name = "iTunesTimeAlbum">
   <Xsl: variable name = "tracksInAlbum"
       select = "Taste ( 'songsByAlbum', string [preceding-sibling :: Taste [1] = 'Album'])" />
   <Xsl: variable name = "t"
       select = "sum ($ tracksInAlbum / integer [preceding-sibling :: Taste [1] = 'Gesamtspielzeit'])" />
   <Xsl: call-template name = "Formattime">
     <Xsl: with-param name = "t" select = "$ t" />
   </ Xsl: call-template>
 </ Xsl: template>

 <Xsl: template name = "Formattime">
   <Xsl: param name = "t" />
   <Xsl: if test = "! $ T = 0">
     <Xsl: variable name = "h" select = "floor (($ t div (1000 * 60 * 60)))" />
     <Xsl: variable name = "m" wählen = "floor (($ t div (1000 * 60)) mod 60)" />
     <Xsl: variable name = "s" select = "floor (($ t div 1000) mod 60)" />
     <Xsl: "$ h = 0", wenn der Test => <xsl: value-of select = "$ h" /> h </ xsl: if>
     <Xsl: value-of select = "format-number ($ m, 00 ')" /> m
     <Xsl: value-of select = "format-number ($ s, 00 ')" /> s
   </ Xsl: if>
 </ Xsl: template> 

Auch wenn Sie die Dauer des iPod ist nicht in der iTunes-Bibliothek sehen möchten (wenn nur ein paar Songs auf dem Album für die Übertragung auf den iPod ausgewählt worden sind), sollten zusätzliche Bedingungen für die Variable t zu wählen hinzugefügt werden:

 <Xsl: variable name = "t"
       select = "sum ($ tracksInAlbum / integer [preceding-sibling :: Taste [1] = 'Gesamtspielzeit']
       [Nicht (../ true [preceding-sibling :: Taste [1] = "Deaktiviert"])]) "/> 

Eine ähnliche Vorlage wird Ihnen die Gesamtzeit der Musik in der iTunes-Bibliothek (oder iPod):

 <Xsl: template name = "iTunesTimeTotal">
   <Xsl: variable name = "t"
       select = "sum (dict / integer [preceding-sibling :: Taste [1] = 'Gesamtspielzeit'])" />
   <Xsl: call-template name = "Formattime">
     <Xsl: with-param name = "t" select = "$ t" />
   </ Xsl: call-template>
 </ Xsl: template>

Und wenn Sie wollen eine Gesamtgröße der Platten Songs zu haben, zur Verfügung Schlüssel Größe:

 <Xsl: template name = "iTunesSizeTotal">
   <Xsl: variable name = "s" select = "sum (dict / integer [preceding-sibling :: Taste [1] = 'Größe'])" />
   <Xsl: value-of select = "Boden ($ s div (1000 * 1000)) div 1000" /> GB
 </ Xsl: template> 

Öffnet die Liste direkt im Browser

Anstatt eine XML / XSLT insbesondere unter Verwendung von, öffnete ich das Register direkt im Browser. Dazu habe ich einen “Wrapper” eine XML-Datei, die das XML-Dateien, die Stylesheet bestimmt anzuwenden, die wichtigsten Anweisungen für die Verarbeitung und Elementen:

 <? Xml version = "1.0" encoding = "UTF-8"?>
 <? Xml-stylesheet href = "albumList.xsl" type = "text / xsl"?>
 <Wrapper>
   <Incl file = "iTunes Music Library.xml" />
 </ Wrapper>

Ich stelle dann die Vorlage an der Spitze des XSL-Stylesheet, das mein Element um eine XML-Datei bereitgestellt Spiele enthalten ist, und wenden Sie ein Stylesheet in eine XML-Datei Vorlagen enthalten.

 <Xsl: template match = "/ Wrapper">
     <Xsl: apply-templates select = "Dokument (inkl / @ Datei)" />
   </ Xsl: template>

Dies sollte in Ihrem aktuellen Browser arbeiten; Ich habe auf dem Internet Explorer (6.0+) und Firefox überprüft.

Hinweis: Der alternative Ansatz vorzuverarbeiten würde p-Liste XML in eine herkömmliche Struktur, wie beschrieben in www.xmldatabases.org/WK/blog/1086?t=item , die dann einfacher sein wird , mit XSLT zu manipulieren. Ich bin bereit , mit zu leben , bevor-Sie bauen, um die Liste in einem Schritt zu erzeugen.


All dies in unter Sheet zusammen. Es sorgt für ein großes Sheet, aber mit den oben genannten Informationen, sollten Sie es auseinander zu nehmen und verwenden Sie die Teile der Lage sein, die Sie wollen.

So, jetzt … Ich habe eine Referenzliste von Alben auf meinem iPod.


Um dieses Skript zu verwenden, in Form von Grund- oder voll, speichern albumList.xml und albumList.xsl unten auf Ihre My Music / iTunes – Ordner und albumList.xml in Ihrem Browser geöffnet (IE6 oder Firefox). Wenn Sie das Layout, mit den oben genannten Richtlinien anpassen möchten, sollten Sie in der Lage sein, Komponenten zu mischen und anzupassen erforderlich. Sie sind herzlich eingeladen, dieses Skript wiederverwenden [ohne jegliche Garantie ausdrücklich oder impliziert] für den persönlichen Gebrauch. Wenn Sie Fragen haben oder Probleme auftreten, wenden Sie sich bitte mit mir in Verbindung .


Datei albumList.xml (Angabe gelten für den iTunes Music albumList.xsl Library.xml):

 <? Xml version = "1.0" encoding = "UTF-8"?>
 <? Xml-stylesheet href = "albumList.xsl" type = "text / xsl"?>
 <Wrapper>
   <Incl file = "iTunes Music Library.xml" />
 </ Wrapper> 

Datei albumList.xsl Basisversion (Auflistung der Namen und Interpreten des Albums auf dem iPod):

 <Xsl: stylesheet xmlns: xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0"?>
   <! - (C) 2005 Chris Veness ->
   <Xsl: output method = "html" encoding = "UTF-8" indent = "yes" />

   <! - Wer passt zu den Wrapper und anwenden Vorlagen auf die <incl> XML-Datei ->
   <Xsl: template match = "/ Wrapper">
     <Xsl: apply-templates select = "Dokument (inkl / @ Datei) / plist / dict / dict" />
   </ Xsl: template>


   <Xsl: key name = "songsByGenre" match = "dict" use = "string [preceding-sibling :: Taste [1] = 'Genre']" />
   <Xsl: key name = "songsByAlbum" match = "dict" use = "string [preceding-sibling :: Taste [1] = 'Album']" />


   <Xsl: template match = "dict">
     <Html>
       <Head>
         <Titel> iPod Album Listing </ title>
         <Meta http-equiv = "Content-Type" content = "text / html; charset = UTF-8" />
       </ Head>
       <Body>
         <Table>

           <Xsl: for-each select = "dict [generate-id = generate-id (Schlüssel ( 'songsByGenre', string) [1]) (.)]">
             <Xsl: sort select = "string [preceding-sibling :: Taste [1] = 'Genre']" />
             <Xsl: for-each select = "Taste ( 'songsByGenre', string) [1]">
               <Xsl: call-template name = "albumsInGenre">
                 <Xsl: with-param name = "Genre" select = "string [preceding-sibling :: Taste [1] = 'Genre']" />
               </ Xsl: call-template>
             </ Xsl: for-each>
           </ Xsl: for-each>

         </ Table>
       </ Body>
     </ Html>
   </ Xsl: template>


   <Xsl: template name = "albumsInGenre">
     <Xsl: param name = "Genre" />

     <! - Header-Genre ->
     <Tr> <td colspan = "3"> <b> <xsl: value-of select = "$ genre" /> </ b> </ td> </ tr>

     <! - Ausgabe jedes Album im Genre ->
     <Xsl: variable name = "Song" wählen = "/ plist / dict / dict / dict" />
     <Xsl: for-each select = "$ Song [generate-id = (.)
         generate-id (Schlüssel ( 'songsByAlbum', string [preceding-sibling :: Taste [1] = 'Album']) [1])] ">
       <Xsl: sort select = "string [preceding-sibling :: Taste [1] = 'Album']" />
       <Xsl: for-each select = "Taste ( 'songsByAlbum', string [preceding-sibling :: Taste [1] = 'Album'])
           [String [preceding-sibling :: Taste [1] = 'Genre'] = $ Genre]
           [Nicht (true [preceding-sibling :: Taste [1] = "Deaktiviert"])] [1] ">
         <Tr valign = "top">
           <Td width = '20 '> </ td>
           <! - Der Albumname: ->
           <Td> <xsl: value-of select = "string [preceding-sibling :: Taste [1] = 'Album']" /> </ td>
           <! - Der Künstler: ->
           <Td>
             <Xsl: choose>
               <Xsl: when test = "true [preceding-sibling :: Taste [1] = 'Compilation']">
                 <I> Compilation </ i>
               </ Xsl: when>
               <Xsl: otherwise>
                 <Xsl: value-of select = "string [preceding-sibling :: Taste [1] = 'Artist']" />
               </ Xsl: otherwise>
             </ Xsl: choose>
           </ Td>
         </ Tr>
       </ Xsl: for-each>
     </ Xsl: for-each>
   </ Xsl: template>

 </ Xsl: stylesheet> 

Datei albumList.xsl Vollversion (inklusive iTunes – Bibliothek komplett mit Zeiten und Zahlen):

 <Xsl: stylesheet xmlns: xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0"> <xsl <- - (C) Chris Veness 2005-2006!>: Ausgang method = "html" encoding = "UTF-8" indent = "yes" /> - xML-Datei -> <xsl <den Wrapper übereinstimmen und anwenden Vorlagen zum <incl>: template match = "/ Wrapper"> <xsl: apply-templates select = "Dokument (inkl / @ Datei) / plist / dict / dict" /> </ xsl: template> <xsl: key name = "songsByGenre" match = "dict" use = "string [ preceding-sibling :: Taste [1] = 'Genre'] "/> <xsl: key name =" songsByAlbum "match =" dict "use =" string [preceding-sibling :: Taste [1] = 'Album'] "/> <xsl: template match =" dict "> <html> <head> <title> iTunes Album Eintrag </ title> <meta http-equiv =" Content-Type "content =" text / html; charset = UTF -8 "/> < 'text / css" type = style> td {vertical-align: top;  padding-right: 1em;  } </ Style> </ head> <body> <table> <xsl: for-each select = "dict [(.) Generate-id = generate-id (Schlüssel ( 'songsByGenre', string) [1])] "> <xsl: sort select =" string [preceding-sibling :: Taste [1] = 'Genre'] "/> <xsl: for-each select =" Taste ( 'songsByGenre', string) [1] "> <xsl: call-template name = "albumsInGenre"> <xsl: with-param name = "Genre" select = "string [preceding-sibling :: key [1] 'Genre' =]" /> </ xsl: call -template> </ xsl: for-each> </ xsl: for-each> <- Summen -> <tr> <td colspan = "4" style = "color: grau"> <b> Total < / b> </ td> <td style = "color: grau '' rechts 'align => <xsl: call-template name =" iPodTimeTotal "/> </ td> <td style =" color: grau' align = 'right'> <xsl: call-template name = "iTunesTimeTotal" /> </ td> </ tr> <tr> <td colspan = "4"> </ td> <td style = "color: grau 'align = 'right'> <xsl: call-template name = "iPodSizeTotal" /> </ td> <td style = "color: grau 'align =' right '> <xsl: call-template name =" iTunesSizeTotal "/> </ td> </ tr> </ table> </ body> </ html> </ xsl: template> <xsl: template name = "albumsInGenre"> <xsl: param name = "Genre" /> <tr> <! - Genre header -> <td colspan = "4"> <b> <xsl: value-of select = "$ genre" /> </ b> </ td> <td align = 'right' Stil = 'Farbe: grau "> <i> iPod </ i> </ td> <td align =' right 'style =" color: gray "> <i> iTunes </ i> </ td> </ tr> <xsl: variable name = "Song" wählen = "/ plist / dict / dict / dict" /> <xsl: for-each select = "$ Song [generate-id = generate-id (Schlüssel ( 'songsByAlbum (.) 'string [preceding-sibling :: Taste [1] =' Album ']) [1])] "> <xsl: sort select =" string [preceding-sibling :: Taste [1] =' Album '] " /> <xsl: for-each select = "Taste ( 'songsByAlbum', string [preceding-sibling :: Taste [1] = 'Album']) [string [preceding-sibling :: Taste [1] = 'Genre' ] = Genre $] [1] "> <! - für Alben nur auf dem iPod, fügen Sie [nicht (true [preceding-sibling :: Taste [1] =" Deaktiviert "])] -> <tr> <td > </ td> <td> <xsl: call-template name = "Album" /> </ td> <td> <xsl: call-template name = "Künstler" /> </ td> <td align = ' right "> <xsl: call-template name =" iPodTimeAlbum "/> </ td> <td align =" right "> <xsl: call-template name =" iTunesTimeAlbum "/> </ td> </ tr> < / xsl: for-each> </ xsl: for-each> <tr> <td colspan = "6"> & # 160; </ td> </ tr> <- Raum zwischen den Genres -> </ xsl: template> <xsl: template name = "Album"> <xsl: value-of select = "string [preceding-sibling :: Taste [1] = 'Album']" /> </ xsl: template> <xsl : template name = "Künstler"> <xsl: choose> <xsl: when test = "true [preceding-sibling :: Taste [1] = 'Compilation']"> <i> Compilation </ i> </ xsl: wenn> <xsl: otherwise> <xsl: value-of select = "string [preceding-sibling :: Taste [1] = 'Artist']" /> </ xsl: otherwise> </ xsl: choose> </ xsl : template> <xsl: template name = "iPodTimeAlbum"> <xsl: variable name = "tracksInAlbum" select = "Taste ( 'songsByAlbum', string [preceding-sibling :: Taste [1] = 'Album'])" / > <xsl: variable name = "t" wählen = "Summe ($ tracksInAlbum / integer [preceding-sibling :: key [1] 'Gesamtspielzeit' =] [nicht (../ true [preceding-sibling :: key [ 1] = "Deaktiviert"])]) "/> <xsl: call-template name =" Formattime "> <xsl: with-param name =" t "select =" $ t "/> </ xsl: Call- template> </ xsl: template> <xsl: template name = "iTunesTimeAlbum"> <xsl: variable name = "tracksInAlbum" select = "Taste ( 'songsByAlbum', string [preceding-sibling :: Taste [1] = 'Album ']) "/> <xsl: variable name =" t "wählen =" Summe ($ tracksInAlbum / integer [preceding-sibling :: Taste [1] =' Gesamtspielzeit ']) "/> <xsl: call-template name = "Formattime"> <xsl: with-param name = "t" select = "$ t" /> </ xsl: call-template> </ xsl: template> <xsl: template name = "iPodTimeTotal"> < xsl: variable name = "t" select = "sum (dict / integer [preceding-sibling :: Taste [1] = 'Gesamtspielzeit'] [nicht (../ true [preceding-sibling :: Taste [1] = "Deaktiviert"])]) "/> <xsl: call-template name =" Formattime "> <xsl: with-param name =" t "select =" $ t "/> </ xsl: call-template> < / xsl: template> <xsl: template name = "iTunesTimeTotal"> <xsl: variable name = "t" select = "sum (dict / integer [preceding-sibling :: Taste [1] = 'Gesamtspielzeit'])" /> <xsl: call-template name = "Formattime"> <xsl: with-param name = "t" select = "$ t" /> </ xsl: call-template> </ xsl: template> <xsl: template name = "iPodSizeTotal"> <xsl: variable name = "s" select = "sum (dict / integer [preceding-sibling :: Taste [1] = 'Größe'] [nicht (../ true [preceding-sibling :: Taste [1] = "Deaktiviert"])]) "/> <xsl: value-of select =" Boden ($ s div (1000000)) div 1000 "/> GB </ xsl: template> <xsl: template name = "iTunesSizeTotal"> <xsl: variable name = "s" select = "sum (dict / integer [preceding-sibling :: Taste [1] = 'Größe'])" /> <xsl: value-of select = "Boden ($ s div (1000000)) div 1000" /> GB </ xsl: template> <xsl: template name = "Formattime"> <xsl: param name = "t" /> <xsl: if test = "$ t = 0"> <xsl: variable name = "h" select = "floor (($ t div (1000 * 60 * 60)))" /> <xsl: variable name = "m" wählen = " floor (($ t div (1000 * 60)) mod 60) "/> <xsl: variable name =" s "select =" floor (($ t div 1000) mod 60) "/> <xsl: if test = "$ h = 0"> <xsl: value-of select = "$ h" /> </ xsl: if> <xsl: value-of select = "format-number ($ m, 00 ')" />: <xsl: value-of select = "format-number ($ s, 00 ')" /> </ xsl: if> </ xsl: template> </ xsl: stylesheet>
Did you find apk for android? You can find new Free Android Games and apps.