XML Verarbeitung

Auch wenn ich die einzelnen Tracks der CDs noch nicht anzeigen, stehen mir mittlerweile alle nötigen Daten in meinem Client zur Verfügung (theorietisch auch das CD-Cover ;-))

Ich wollte hier nochmal ein wenig auf die XML-Verarbeitung eingehen. Woran ich bei meinem Einstieg nicht gedacht habe, war, dass nicht alle Zeichen einfach in dem XML Dokument stehen können. Einige der Zeichen müssen in einer extra Notation angegeben werden – ähnlich wie in HTML. Sprich ich habe in meinem PHP Webservice eine kleine Funktion gebaut, die mir diese Zeichen bei meinen CD Daten ersetzt, so dass ich am Ende ein valides XML-Dokument erhalte, dass auch vernünftig weiterverarbeitet werden kann.

Eine Übersicht der Zeichen und durch was sie ersetzt werden müssen, findet man auf folgender Seite: Sonderzeichen in XML


Das Weiterverarbeiten der XML Daten in C# war im ersten Schritt auch nur ‚copy & paste‘ aus dem angegebenen Tutorial. Somit ist es auch an der Zeit mal zu verstehen was da genau gemacht wird. Einen guten Einstieg dafür bietet die folgende Seite:

LINQ to XML – 5 Minute Overview

Ich muss sagen, je mehr ich mit LINQ arbeite, desto besser gefällt mir das Ganze. Anbei ein paar Beispiele wie ich aus dem XML-Dokument an die Daten ran komme.

Zuerst mal ‚Demo-Ausgangsmaterial‘ damit man sieht mit welcher Datenbasis wir es hier zu tun haben.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<CDDATA>
  <HEAD>
    <ID>1</ID>
    <CDTYPEID>1</CDTYPEID>
    <ASIN>B000055WVX</ASIN>
    <ARTIST>3 DOORS DOWN</ARTIST>
    <TITLE>LOSER</TITLE>
    <RELEASE>2000</RELEASE>
  </HEAD>
  <TRACKLIST CD="1">
    <TRACK NR="1">
      <ARTIST>3 DOORS DOWN</ARTIST>
      <TITLE>LOSER</TITLE>
      <DESCRIPTION>TOP 40 RADIO EDIT</DESCRIPTION>
      <PLAYTIME>03:50</PLAYTIME>
    </TRACK>
    <TRACK NR="2">
      <ARTIST>3 DOORS DOWN</ARTIST>
      <TITLE>LOSER</TITLE>
      <DESCRIPTION>ALBUM VERSION</DESCRIPTION>
      <PLAYTIME>04:27</PLAYTIME>
    </TRACK>
    <TRACK NR="3">
      <ARTIST>3 DOORS DOWN</ARTIST>
      <TITLE>LOSER</TITLE>
      <DESCRIPTION>LIVE VERSION</DESCRIPTION>
      <PLAYTIME>05:41</PLAYTIME>
    </TRACK>
    <TRACK NR="4">
      <ARTIST>3 DOORS DOWN</ARTIST>
      <TITLE>LOSER</TITLE>
      <DESCRIPTION>ACOUSTIC, RADIO FRITZ, BERLIN</DESCRIPTION>
      <PLAYTIME>04:01</PLAYTIME>
    </TRACK>
    <TRACK NR="5">
      <ARTIST>3 DOORS DOWN</ARTIST>
      <TITLE>KRYPTONITE</TITLE>
      <DESCRIPTION>ACOUSTIC VERSION</DESCRIPTION>
      <PLAYTIME>03:49</PLAYTIME>
    </TRACK>
  </TRACKLIST>
  <TRACKLIST CD="2">
  </TRACKLIST>
  <BONUS>
    <BONUSENTRY NR="1">VIDEO: 3 DOORS DOWN - KRYPTONITE</BONUSENTRY>
  </BONUS>
  <COVER>
  </COVER>
</CDDATA>

Liste der Tracks ersten CD

1
2
3
4
5
6
var tracklist = 
(
    from cddata in doc.Descendants("TRACKLIST")
    where (int)cddata.Attribute("CD") == 1
    select cddata
);

Verarbeitung der einzelnen Tracks:

1
2
3
4
5
6
7
8
9
10
var tracks = 
from cdtracks in tracklist.Descendants("TRACK")
select new Track
{
    TrackNr = Convert.ToInt32(cdtracks.Attribute("NR").Value),
    Artist = cdtracks.Element("ARTIST").Value,
    Title = cdtracks.Element("TITLE").Value,
    Description = cdtracks.Element("DESCRIPTION").Value,
    Playtime = cdtracks.Element("PLAYTIME").Value
};

Auslesen des CD-Covers (Base64String)

1
2
3
4
5
var coverdata = 
(
    from cdcover in doc.Descendants("COVER") 
    select cdcover.Value
).Single();

Nachdem es nur ein CD-Cover pro CD gibt, kann man mit ‚.Single()‚ das Ganze auf ein Resultat beschränken. Die Variable coverdata hätte somit an dieser Stelle auch direkt als String deklariert werden können.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert