Hallo!

Ik heb net een nieuwe iPod touch gekocht, waarvoor ik al een aantal andere versies heb gehad:D maar goed, dit is toch wat nieuws.

Toen ben ik ook tegen de lamp gelopen met het feit dat ik eigelijk niet via internet mijn complete muziek collectie kan lezen, wat mij echt irriteert (ja, jullie denken dies gek!)

Nou heb ik van alles geprobeerd en ik kom er maar niet uit. Ik wil vanuit XML naar SQL gaan (eerst maar even naar PHP:D) alleen hoe?

<key>2933</key>
		<dict>
			<key>Track ID</key><integer>2933</integer>
			<key>Name</key><string>Get Freaky</string>
			<key>Artist</key><string>Play-N-Skillz Ft. Pitbull</string>
			<key>Album Artist</key><string>Various Artists</string>
			<key>Album</key><string>Phat Jams 55</string>
			<key>Genre</key><string>Hip - Hop</string>
			<key>Kind</key><string>MPEG-audiobestand</string>
			<key>Size</key><integer>8554575</integer>
			<key>Total Time</key><integer>267258</integer>
			<key>Track Number</key><integer>5</integer>
			<key>BPM</key><integer>138</integer>
			<key>Date Modified</key><date>2008-03-11T20:08:11Z</date>
			<key>Date Added</key><date>2008-04-20T15:19:55Z</date>
			<key>Bit Rate</key><integer>256</integer>
			<key>Sample Rate</key><integer>44100</integer>
			<key>Comments</key><string> 00000ACC 00000BD0 000064F6 000074CE 00011187 00011187 00008000 00008000 0000C367 00011170</string>
			<key>Persistent ID</key><string>8B5466DC732E9AEC</string>
			<key>Track Type</key><string>File</string>
			<key>Location</key><string>file://localhost/E:/05%20Get%20Freaky.mp3</string>
			<key>File Folder Count</key><integer>-1</integer>
			<key>Library Folder Count</key><integer>-1</integer>
		</dict>


Dat is de XML bron code (hij loopt nog op hoor!) maar hoe kan ik dit uit lezen? overal hebben ze het bv over <naam>jan</naam> alleen Apple maakt gebruik van <key>naam</key><intreger>Jan</intreger>

Hoe kan ik dat uit lezen? ben al wat aan het rond zoeken en verder dan <?php ?> kom ik niet...

Wie o Wie?
SimpleXML maakt dit erg eenvoudig, zie http://nl.php.net/simplexml.

Wanneer je PostgreSQL als database gebruikt, kun je er ook voor kiezen om direct de XML in je database te stoppen en met de beschikbare XML-functies in de database (dus in je SQL) de boel uit te lezen. Zou ik zelf niet zo snel voor kiezen, maar het kan. Zie de handleiding voor de details.

Ps. Oracle, DB2 en andere databases kennen ook goede ondersteuning voor XML.
pgFrank,

Zou je wel denken inderdaad alleen krijg ik het dus niet werkend.

Om even heel simpel te zijn, is dat even mijn script:

<?php

$itunes = simplexml_load_file('iTunes Music Libary.xml);

echo $itunes->key[2933]->Name;

?>

(gehaald van de SimpleXML tutorial van hier, maar werkt gewoon niet...! kut Apple!:O ow nee dat meen ik niet!!
En waar is de foutafhandeling? Wie zegt bv. dat jij met succes het genoemde bestand hebt kunnen openen? Dat controleer je nergens, de kans dat het goed gaat is dan ook minimaal.

Wat dacht je er van om bv. error_reporting aan te zetten en op het hoogste niveau te zetten?

Zonder fatsoenlijke foutmelding kan niemand je helpen, dat lijkt me logisch.
Hallo!

Op verzoek staat error_reporting aan. Hoogste niveau maar geen fout meldingen. Het scherm blijft gewoon leeg.

Ik heb het orginele script van php.net aangehouden welke hier te vinden is

Domweg heb ik gewoon hun XML script vervangen met die van mij, de lijnen aan gepast en als ik nou niet blond was zou je denken dat het werkt, maar niets is minder waar!

<?php
ERROR_REPORTING(E_ALL);
include 'example.php';

$xml = new SimpleXMLElement($xmlstr);

echo $xml->dict->string; // "So this language. It's like..."
?>
print_r($xml);

Wat levert dat op?
Helemaal niets. Weer wit scherm... Vage php soms!:D
Ga dan eerst maar eens uitzoeken waarom jouw script helemaal niks doet, dit lijkt me geen probleem van de XML. Heb je display_errors wel aangezet? Heb je uberhaubt wel Apache en PHP draaien?
Ik ben bang dat iTunes een XML file exporteert waar je in eerste instantie vrij weinig mee kunt, het bestand is namelijk totaal niet logisch opgebouwd. Het zal waarschijnlijk prima gebruikt kunnen worden om te importeren in iTunes op een andere computer, maar om ermee te werken in PHP is het echt drama.

Data die bij elkaar hoort, staat welliswaar op dezelfde regel in de XML file, maar dus niet onder dezelfde node. Dat zorgt er dus voor dat als je het bestand bijvoorbeeld met SimpleXML inleest, de complete relatie tussen de verschillende gegevens verdwenen is en je eigenlijk een nutteloos hoopje rommel overhoudt.

Je zou allereerst eens goed moeten kijken welke elementen uit het SimpleXMLElement nu eigenlijk bij elkaar horen (print_r doet wonderen) en die dan met PHP weer aan elkaar gaan knopen. Maar goed, dan ben je er nog niet van verzekerd dat een volgende export precies dezelfde indeling hanteert. Een kleine verandering en alle relaties die jij met PHP legt kunnen op de schroothoop...

ps. Voor Frank en anderen even een voorbeeldje van hoe zo'n XML export file eruit ziet:

http://phphulp.jorendewit.nl/temp/itunes_export.php

pps. Overigens zijn er op internet wel voldoende parsers te vinden die de XML van de itunes library kunnen interpreteren en een normale bruikbare PHP output kunnen genereren. Ook zijn er wel voorbeelden te vinden van hoe je met behulp van XSLT de inhoud van je iTunes library kunt weergeven...

Enkele links:
- http://www.xml.com/lpt/a/1495
- http://codetriangle.com/products/iTunesXmlParser/
- http://www.movable-type.co.uk/scripts/itunes-albumlist.html

Reageren