Läsa XML-filer från Java

Nedan redovisad kod kräver att man har Java 7 (för stöd av DocumentBuilder) och uppåt…

OBS: I kodlistingarna nedan så stämmer inte radnumreringen mellan större block av kod respektive mindre redovisningar av densamma kod, dvs samma rad får olika numrering. Beror på pluginen ”Crayon…” (ny för mig) som möjliggör rimligt läsbara kodlistningar.

XML -formatet .xspf används för mediafiler och stöds ex av den fria videovisaren VLC. Man bör kontrollera att XML -filen är valid (korrekt). För detta finns t.ex. sajten validator.xspf.org. Java -tolken kan bli förvillad om något är ”skevt” i XML-filen :-) …

En .xspf -fil ser ut något i stil med det här:

Det handlar alltså om en spellista, ungefär som en LP -skiva med spår numrerade 0, 1, 2…
.xspf -filen börjar i enlighet med alla valida XML med en innehållsdeklaration <?xml version=”1.0″ encoding=”UTF-8″?> på rad 1. Därefter kommer taggen

Den pekar ut källan till xml-formatet samt i mitt fall hänvisar till uppgifter som gäller den aktuella videospelaren VLC. Sedan en titel, vilket spår (”track”), och slutligen används vlc:id för att berätta om ordningen som filerna ska spelas upp. Lägg märke till taggarna location och duration.

Duration är under hur lång tid som ”spåret” pågår, mätt i millisekunder. Jag är ofta intresserad av den totala tiden för en spellista. Det man behöver göra är att:

a) summera alla tider som anges vid duration,
b) dela med 1000 (för sekunder), samt
c) dela med 60 (för minuter).

I värsta fall också dela med 60 igen för timmar :-) …

Detta är ett givet exempel för att testa Javas förmåga att enkelt hantera XML -filer. För att gå igenom (traversera) en XML -fil med Java så behövs följande:

uppe vid package -delen, dvs i början av koden. Inne i main() -klassen ska

finnas. ”Try” i följande kod beror på att fel/”exception” kan kastas vid försök att läsa XMLen:

Ovan har vi redan fångat upp alla de ”noder” med taggen ”duration” i XML-listningen längst upp, dvs de noder med innehållet 486166 respektive 401750. OBS det är alltså en lista med noder, ännu ej direkt text eller siffror som går att summera.

För att först hämta node-innehållet till en teckensträng och sedan konvertera till ett summerbart tal så måste man göra enligt följande:

Då hamnar först texten i ”row”, och siffervärdet för första strängen ”486166” som blir ett heltal 486166.

Detta tal lagras i variabeln ”timeTotal”. För att loopa igenom alla rader så använder jag ”nodes.getLength()”.

Så med
1. variabeldeklarationer blir uttrycket med
2. loop,
3. konvertering till tal, och avslutningsvis
4. summering av antalet millisekunder (division med 60000 för att få antalet minuter):

Komplett programlistning:

Das ist Alles für heute!

Be First to Comment

Lämna ett svar

E-postadressen publiceras inte. Obligatoriska fält är märkta *