Stortingsvalg - Eksamen V2009

Eksempel på bruk av XML

H-P Ulven, 26.04.13

Se side 271, 272 og 273 i PiAS!

I alle eksemplene under skal vi liste ut all informasjonen i en datastruktur

omtrent slik:

Spørsmål nr:     1
Spørsmål:        Hvilket parti osv...
   Alternativ nr 0: H
   Alternativ nr 1: Frp
   Alternativ nr 2: SV
Media:           solberg.jpg
Fasit:           0
Spørsmål nr:     2
Spørsmål:        Spill av lydkuttet. Hvem hører du?
   Alternativ nr 0: KM Bondevik
   Alternativ nr 1: D Høybråten
   Alternativ nr 2: L Sponheim
Media:           hoybraten.mp3
Fasit:           1
Spørsmål nr:     3
Spørsmål:        Spill av intervjuet du ... osv 
   Alternativ nr 0: H og Frp
   Alternativ nr 1: H, Krf og V
   Alternativ nr 2: H, Krf, V og S
Media:           stoltenberg.flv
Fasit:           1

Først som array med objekter (assosiativt array):

var quizarray: Array = 
[
   {  sporsmal:   "Hvilket parti osv...",
      media:      "solberg.jpg",
      alternativ: ["H", "Frp", "SV" ],
      fasit:      0
   },

   {  sporsmal:   "Spill av lydkuttet. Hvem hører du?",
      media:      "hoybraten.mp3",
      alternativ: ["KM Bondevik","D Høybråten","L Sponheim" ],
      fasit:      1
   },

   {  sporsmal:   "Spill av intervjuet du ... osv ",
      media:      "stoltenberg.flv",
      alternativ: ["H og Frp", "H, Krf og V", "H, Krf, V og S"],
      fasit:      1
   }
];

/// --- Lister ut all info i tabellen --- ///
for(i = 0; i < quizarray.length; i++) {
   trace("Spørsmål nr:     " + (i+1) );
   trace("Spørsmål:        " + quizarray[i].sporsmal);
   for(j = 0; j < quizarray[i].alternativ.length; j++){
      trace("   Alternativ nr " + j + ": " + quizarray[i].alternativ[j]);
   }//for j
   trace("Media:           " + quizarray[i].media);
   trace("Fasit:           " + quizarray[i].fasit);
}//for i

Tilsvarende med tabellen laget som XML variabel direkte i RAM:

var quizxml: XML =
   <quiz>
      <data>
         <sporsmal> Hvilket parti osv...</sporsmal>
         <media>solberg.jpg</media>
         <alternativ>H</alternativ>
         <alternativ>Frp</alternativ>
         <alternativ>SV</alternativ>
         <fasit>0</fasit>
      </data>
	  
      <data>
         <sporsmal> Spill av lydkuttet. Hvem hører du?</sporsmal>
         <media>hoybrate.mp3</media>
         <alternativ>K M Bondevik</alternativ>
         <alternativ>D Høybråten</alternativ>
         <alternativ>L Sponheim</alternativ>
         <fasit>1</fasit>
      </data>
	  
      <data>
         <sporsmal>Spill av intervjuet du ... osv</sporsmal>
         <media>stoltenberg.flv</media>
         <alternativ>H og Frp</alternativ>
         <alternativ>H, Krf og V</alternativ>
         <alternativ>H, Krf, V og S</alternativ>
         <fasit>1</fasit>
      </data>
   </quiz> ;
trace("Viser hele xml-fil (debug): ");
trace(quizxml);
trace("\n");
/// --- Lister ut all info i tabellen --- ///
for(i = 0; i < quizxml.data.length(); i++) {
   trace("Spørsmål nr:     " + (i+1) );
   trace("Spørsmål:        " + quizxml.data[i].sporsmal);
   for(j = 0; j < quizxml.data[i].alternativ.length(); j++){
      trace("   Alternativ nr " + j + ": " + quizxml.data[i].alternativ[j]);
   }//for j
   trace("Media:           " + quizxml.data[i].media);
   trace("Fasit:           " + quizxml.data[i].fasit);
}//for i

Tilsvarende med tabellen lagret som XML i ekstern fil quiz_xml.xml:

(Filen kan du skrive i NotePad og lagre som quiz_xml.xml istedenfor quiz_xml.txt.)

<quiz>
   <data>
      <sporsmal> Hvilket parti osv...</sporsmal>
      <media>solberg.jpg</media>
      <alternativ>H</alternativ>
      <alternativ>Frp</alternativ>
      <alternativ>SV</alternativ>
      <fasit>0</fasit>
   </data>
   <data>
      <sporsmal> Spill av lydkuttet. Hvem hører du?</sporsmal>
      <media>hoybraten.mp3</media>
      <alternativ>K M Bondevik</alternativ>
      <alternativ>D Høybråten</alternativ>
      <alternativ>L Sponheim</alternativ>
      <fasit>1</fasit>
   </data>
   <data>
      <sporsmal>Spill av intervjuet du ... osv</sporsmal>
      <media>stoltenberg.flv</media>
      <alternativ>H og Frp</alternativ>
      <alternativ>H, Krf og V</alternativ>
      <alternativ>H, Krf, V og S</alternativ>
      <fasit>1</fasit>
   </data>
</quiz>

I dette tilfellet må filen lastes med en URLLoader og lage en lytter-funksjon som ikke blir kjørt før filen er ferdig lagt inn i hukommelsen:

var url: URLRequest = new URLRequest("quiz_valg.xml");   // Filen
var loader: URLLoader = new URLLoader();                 // Loader (som lyd)
loader.load(url);	                                       // Vi laster filen inn i RAM
loader.addEventListener(Event.COMPLETE,xmlLastet);      // Kjører lytterfunksjon når filen er klar
/// --- Lister ut all info i tabellen --- ///
function xmlLastet(evt: Event): void {
   var quizxml: XML = new XML(loader.data);
   for(i = 0; i < quizxml.data.length(); i++) {
      trace("Spørsmål nr:     " + (i+1) );
      trace("Spørsmål:        " + quizxml.data[i].sporsmal);
      for(j = 0; j < quizxml.data[i].alternativ.length(); j++){
         trace("   Alternativ nr " + j + ": " + quizxml.data[i].alternativ[j]);
      }//for j
      trace("Media:           " + quizxml.data[i].media);
      trace("Fasit:           " + quizxml.data[i].fasit);
   }//for i
}//xmlLastet()