PHP ja XML-tiedosto, new DOMDocument('1.0','UTF-8') ja createElement() funktiot

Paluu PHP-oppaan taulukkoon

XML-tiedoston rakenne

XML-tiedoston pääte on .xml ja tiedoston alussa xml-elementissä kerrotaan xml-versio sekä tekstin koodaustapa (Ä.Ö ja Å kirjaimet eli tiedostossa käytetään ia aakkosia.

Seuraaville elementeille ohjelmoitsija saa antaa vapaasti nimet, suositus ettei elementtien nimissä käytetä Ä, Ö tai Å kirjaimia.

>Elementtien nimet kannattaa valita kuvaamaan xml-tiedostoon tallennettavia asioita.

Sisimpiä elementtejä voi kutsua objekteiksi joilla on arvo, arvo voi olla numero tai merkkijono.

Kohdassa XML-tiedoston luominen, luodaan autot.xml tiedosto johon voidaan tallentaa tietoja useista autoista, ylimmän tason elementin nimi on autot. Seuraavan tason elementin nimi on merkki, jolloin tiedosto voi sisältää useita auto-merkkejä ja usean nimisiä autoja sekä näiden malleja.

XML-tiedoston luominen

Halutaan luoda seuraava autot.xml niminen XML-tiedosto:

    <?xml version="1.0" encoding="UTF-8"?>
    <autot>
      <merkki id="1">
        <nimi>Skoda</nimi>
        <malli>Octavia</malli>
        <kori>sedan</kori>
      </merkki>
    </autot>
	

Luodaan autot.xml tiedosto:

    <?php
      $dom = new DOMDocument('1.0','UTF-8');
      $dom->formatOutput = true;

      $root = $dom->createElement('autot');
      $dom->appendChild($root);

      $merkki = $dom->createElement('merkki');
      $root->appendChild($result);

      $merkki->setAttribute('id', 1);
      $merkki->appendChild( $dom->createElement('nimi', 'Skoda') );
      $merkki->appendChild( $dom->createElement('malli', 'Octavia') );
      $merkki->appendChild( $dom->createElement('kori', 'sedan') );

      echo '<xmp>'. $dom->saveXML() .'</xmp>';
      $dom->save('autot.xml') or die('XML Create Error');
    ?>
    

    XML-tiedoston henkilo.xml koodaus:
	 
    <?xml version="1.0" encoding="UTF-8"?>
     <henkilo status = "ok">
        <opiskelija henk_no = "11">
          <nimi>Anttonen Antti</nimi>
          <luokka>G-404</luokka>
        <opiskelija>
        <opiskelija henk_no = "12">
          <nimi>Virtanen Ville</nimi>
          <luokka>E-512</luokka>
        </opiskelija>
     </henkilo>
	  
    PHP-koodaus jolla näytetään xml-tiedoston kaikki tiedot:  
	  
    <?php
     $xml = simplexml_load_file('http://tietokanta.dy.fi/ohjelmointi/uusi_opiPHP/POISTA/PHP_XML/henkilo.xml');
     echo '<h3>Henkilö listaus</h3>';
     $lista = $xml->opiskelija;

     for ($i = 0; $i < count($lista); $i++) {
       echo '<b>Henkilo no:</b> ' . $lista[$i]->attributes()->henk_no . '<br>';
       echo 'Nimi: ' . $lista[$i]->nimi . '<br>';
       echo 'Luokka: ' . $lista[$i]->luokka . '<br><br>';
     }
    ?>
	

Tulos www-sivulla toimivalla PHP-koodauksella

Henkilö listaus

Henkilö no: 11
Nimi: Anttonen Antti
Luokka: G-404

Henkilö no: 12
Nimi: Virtanen Ville
Luokka: E-512

Tämä esimerkki sivu hakee xml-tiedoston palvelimelta jolloin tiedoston osoite täytyy olla tiedoston www-osoite.
Jos xml-tiedosto käsitellään php-koodauksella joka siirtää xml-tiedot esimerkiksi muuttujilla, xml-tiedoston osoitteeksi riittää tiedoston nimi.

simplexml_load_file() ja var_dump()

Esimerkeissä käytettävä kirjasto.xml niminen XML-tiedosto:

    <?xml version="1.0" encoding="UTF-8"?>
    <kirjasto>
      <kirja>
        <nimi> Hopeisen hummerihaarukan tapaus </nimi>
        <kirjoitttaja tyyli="rikos"> Alan Bradley </kirjoittaja>
        <tiedot> Hurmaava yksitoistavuotias harrastelijasalapoliisi Flavia de Luce uskaltautuu kylän markkinoilla 
		           mustalaisnaisen telttaan ja järkyttyy kuulemastaan ennustuksesta pahanpäiväisesti.  </tiedot>
      </kirja>
      <kirja>
        <nimi> Kyberias </nimi>
        <kirjoitttaja tyyli="scifi">  Stanislaw Lem </kirjoittaja>
        <tiedot> Kyberiaksen utopistinen maailma robotteineen ja huimine keksintöineen muistuttaa oudolla tavalla omaamme 
	               – sen ihmisiä ja instituutioita. </tiedot>
      </kirja>
      <kirja>
        <nimi> PATRIARKKOJA JA OLIGARKKEJA </nimi>
        <kirjoitttaja tyyli="elämänkerta">  Rene Nyberg </kirjoittaja>
        <tiedot> Pitkän diplomaattiuran tehneen Venäjän-tuntijan esseekirja kertoo Suomen ja Venäjän lähihistoriasta, 
	               mutta valaisee myös Neuvostoliiton todellisuutta </tiedot>
      </kirja>
     </kirjasto>
	

Ladataan kirjasto.xml niminen XML-tiedosto kirjat- nimisen objektiin ja näytetään sen sisältö var_dup() funktiolla:

object(SimpleXMLElement)#4 (1) { ["kirja"]=> array(3) { [0]=> object(SimpleXMLElement)#5 (3) { ["nimi"]=> string(34) " Hopeisen hummerihaarukan tapaus " ["kirjoittaja"]=> string(14) " Alan Bradley " ["tiedot"]=> string(198) " Hurmaava yksitoistavuotias harrastelijasalapoliisi Flavia de Luce uskaltautuu kylän markkinoilla mustalaisnaisen telttaan ja järkyttyy kuulemastaan ennustuksesta pahanpäiväisesti. " } [1]=> object(SimpleXMLElement)#6 (3) { ["nimi"]=> string(10) " Kyberias " ["kirjoittaja"]=> string(15) " Stanislaw Lem " ["tiedot"]=> string(156) " Kyberiaksen utopistinen maailma robotteineen ja huimine keksintöineen muistuttaa oudolla tavalla omaamme – sen ihmisiä ja instituutioita. " } [2]=> object(SimpleXMLElement)#7 (3) { ["nimi"]=> string(29) " PATRIARKKOJA JA OLIGARKKEJA " ["kirjoittaja"]=> string(13) " Rene Nyberg " ["tiedot"]=> string(171) " Pitkän diplomaattiuran tehneen Venäjän-tuntijan esseekirja kertoo Suomen ja Venäjän lähihistoriasta, mutta valaisee myös Neuvostoliiton todellisuutta " } } }

Edellä tulee testatuksi onko xml-tiedosto kirjoitettu oikein, mikäli ei ole koodaus antaa ilmoituksen false-ilmoituksen. Tässä muodossa tulostus ei ole mitenkään hyödyllinen muutoin kuin tutkittaessa tarkemmin sen sisältöä.

asXML()

Paremmin muotoillun tulosteen xml-tiedoston sisällöstä saa asXML()-metodilla.

<?xml version="1.0" encoding="UTF-8"?> <kirjasto> <kirja> <nimi> Hopeisen hummerihaarukan tapaus </nimi> <kirjoittaja tyyli="rikos"> Alan Bradley </kirjoittaja> <tiedot> Hurmaava yksitoistavuotias harrastelijasalapoliisi Flavia de Luce uskaltautuu kylän markkinoilla mustalaisnaisen telttaan ja järkyttyy kuulemastaan ennustuksesta pahanpäiväisesti. </tiedot> </kirja> <kirja> <nimi> Kyberias </nimi> <kirjoittaja tyyli="scifi"> Stanislaw Lem </kirjoittaja> <tiedot> Kyberiaksen utopistinen maailma robotteineen ja huimine keksintöineen muistuttaa oudolla tavalla omaamme – sen ihmisiä ja instituutioita. </tiedot> </kirja> <kirja> <nimi> PATRIARKKOJA JA OLIGARKKEJA </nimi> <kirjoittaja tyyli="elämänkerta"> Rene Nyberg </kirjoittaja> <tiedot> Pitkän diplomaattiuran tehneen Venäjän-tuntijan esseekirja kertoo Suomen ja Venäjän lähihistoriasta, mutta valaisee myös Neuvostoliiton todellisuutta </tiedot> </kirja> </kirjasto>

xpath()

Haluttaessa xml-tiedoston sisällöstä esittää kaikki kirjailijat tulosteen saa xpath()-metodilla:

Alan Bradley
Stanislaw Lem
Rene Nyberg

Esimerkin koodaus:

    
	  
<?php
  $tiedot = simplexml_load_file('http://tietokanta.dy.fi/ohjelmointi/uusi_opiPHP/POISTA/PHP_XML/kirjasto.xml');
  $kirjailijat = $tiedot->xpath("/kirjasto/kirja/kirjoittaja");
  foreach($kirjailijat AS $kirjoittaja){
    echo $kirjoittaja . "<br/>";
  }
?>