PDA

Volledige versie bekijken : iTunes XML omzetten werkt niet meer


Heedless
%Europe/Berlin %414 %2007, 09:57
Ik heb ooit een keer mbv flash een beeld gemaakt aan de hand van mijn iTunes library.

Ik had mijn library ge-exporteert als XML. Dat XML bestand is heel onhandig opgemaakt, de nodes hebben allemaal dezelfde naam enzo.

Ik vond toen deze code om het xml bestand te converteren;

Eerst een xls bestand:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes"/>

<xsl:template match="/">
<songlist>
<xsl:apply-templates select="plist/dict/dict/dict"/>
</songlist>
</xsl:template>

<xsl:template match="dict">
<song>
<xsl:apply-templates select="key"/>

</song>
</xsl:template>


<xsl:template match="key">
<xsl:element name="{translate(text(), ' ', '_')}">
<xsl:value-of select="following-sibling::node()[1]"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

en die pas je toe via een php bestand:

<?php
$x = xslt_create();
$result = xslt_process($x,
'file://'.getcwd()."\xml\Library.xml",
'file://'.getcwd().'\xsl\iTunes.xsl');
if ($result) {
$file = 'Library.xml';
$file = fopen($file, 'w');
fwrite($file, $result);
fclose($file);
} else {
print "XSLT error: ".xslt_error($x).", error code: ".xslt_errno($x);
}
xslt_free($x);
echo "klaar";
?>

Dit werkte een tijd geleden, maar nu krijg ik opeens deze error:

Fatal error: Call to undefined function xslt_create() in /home/deluchti/public_html/iMap/omzetten.php on line 2


Blijkbaar werkt die code niet meer in nieuwere php versies?
Weet iemand hoe ik alsnog mijn XML op kan maken?

Bargok
%Europe/Berlin %430 %2007, 10:19
Dit is inderdaad een php4 functie, en bestaat niet meer in PHP5.
http://nl3.php.net/simpleXml is misschien wat je zoekt? Ik begrijp niet exact wat je wilt doen doen namelijk :).

Heedless
%Europe/Berlin %475 %2007, 11:24
In iTunes kan je je library exporteren als xml.

Standaard zie je niet welke node waar voor staat. Daarbij komt nog dat je er ook niet van uit kan gaan dat de 4e node altijd playcount is bijv, want als een nummer bijv geen album heeft, dan schuift alles 1 op en zal de 3e node de playcount zijn.

Met het script dat ik bovenaan liet zien kan je het xml bestand opnieuw opmaken en de goede nodenames geven.

Heb je niet zoiets als php 4 emulators?

BernardV
%Europe/Berlin %483 %2007, 11:35
Je kunt wel zoiets doen:
<?
//header('Content-type: text/xml');
$result = "<?xml version='1.0' encoding='UTF-8'?>";
$result .= "<songs>\n";

$xml = new SimpleXMLElement(file_get_contents("Bibliotheek.xml"));

foreach ($xml->dict->dict->dict as $song) {
$result .= "\t<song>\n";
$counter = 0;
$lastKey = "";
foreach($song as $key=>$value)
{
if($counter%2==0)
{
$lastKey = strtolower(str_replace(" ","",$value));
$result .= "\t\t<" . $lastKey . " ";

} else {
if(strtolower($key)=="string")
$result .= "type='" . strtolower($key) . "'><![CDATA[" . $value . "]]></" . $lastKey .">\n";
else
$result .= "type='" . strtolower($key) . "'>" . $value . "</" . $lastKey .">\n";
}
$counter++;
}
$result .= "\t</song>\n";
}

$result .= "</songs>";

$fp = fopen("test.xml","w");
fwrite($fp,$result,strlen($result));
fclose($fp);
?>
Dan is je resultaat iets als:
<songs>
<song>
<trackid type='integer'>1234</trackid>
<name type='string'><![CDATA[Twilight]]></name>
<artist type='string'><![CDATA[U2]]></artist>
<album type='string'><![CDATA[Boy]]></album>
<kind type='string'><![CDATA[MPEG-audiobestand]]></kind>
<size type='integer'>6320003</size>
<totaltime type='integer'>262661</totaltime>
<discnumber type='integer'>1</discnumber>
<disccount type='integer'>1</disccount>
<tracknumber type='integer'>2</tracknumber>
<year type='integer'>1980</year>
<datemodified type='date'>2006-03-08T21:29:36Z</datemodified>
<dateadded type='date'>2007-08-28T22:35:44Z</dateadded>
<bitrate type='integer'>192</bitrate>
<samplerate type='integer'>44100</samplerate>
<normalization type='integer'>3026</normalization>
<artworkcount type='integer'>1</artworkcount>
<persistentid type='string'><![CDATA[063233D797DF09C8]]></persistentid>
<tracktype type='string'><![CDATA[File]]></tracktype>
<location type='string'><![CDATA[file://localhost/Z:/iTunes/u2/Boy/02%20Twilight.mp3]]></location>
<filefoldercount type='integer'>-1</filefoldercount>
<libraryfoldercount type='integer'>-1</libraryfoldercount>
</song>
.....
</songs>

Heedless
%Europe/Berlin %594 %2007, 14:16
Dankje! :D Ik ga straks eens kijken of het werkt :)