Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

PHP: Generovanie XML metódou SAX

V predchádzajúcej lekcii, Úvod do práce so súbormi v PHP , sme si ujasnili, aké typy súborov existujú a ako pracovať s cestami k týmto súborom. V tejto lekcii sa pozrieme aj na to, ako pracovať s neštruktúrovaným obyčajným textom v jazyku PHP.

Nechal som sa inšpirovať článkom Úvod do XML a zápis Saxe a napísal som podobnú aplikáciu v PHP. Použil som aj rovnaké vstupné dáta.

$uzivatele=new Uzivatele();
$uzivatele->Add(new Uzivatel("Pavel Slavík", 22, new Datum(2000, 3, 21)));
$uzivatele->Add(new Uzivatel("Jan Novák", 31, new Datum(2012, 10, 30)));
$uzivatele->Add(new Uzivatel("Tomáš Marný", 16, new Datum(2011, 1, 12)));

Pre generovanie XML metódou SAX je možné použiť triedu XMLWriter.

$out = new XMLWriter();
$out->openMemory();
$out->startDocument('1.0','UTF-8');
$out->setIndent(TRUE);
$uzivatele->exportXML($out);
$out->endDocument();
echo $out->outputMemory(TRUE);

Najzaujímavejšie metódou bude asi exportXML() objektu $uzivatele. Ostatné príkazy nastavujú parametre výstupu.

Trieda Užívateľ má len 2 metódy: Pre pridanie ďalšieho používateľa a pre export výsledného XML.

class Uzivatele {
  private $seznam=array();

  function Add($uzivatel) {
    $this->seznam[]=$uzivatel;
  }

  function exportXML($out) {
    $out->startElement('uzivatele');
    foreach($this->seznam as $uzivatel) {
      $uzivatel->exportXML($out);
    }
    $out->endElement();
  }
}

Trieda Uzivatel obsahuje 3 atribúty, podľa uváženia si môžete pridať ďalšie.

class Uzivatel {
  private $jmeno;
  private $vek;
  private $registrovan;

  function __construct($jmeno,$vek,$registrovan) {
    $this->jmeno=$jmeno;
    $this->vek=$vek;
    $this->registrovan=$registrovan;
  }

  function exportXML($out) {
    $out->startElement('uzivatel');
    $out->writeAttribute('vek',$this->vek);
    $out->writeElement('jmeno',$this->jmeno);
    $this->registrovan->exportXML($out);
    $out->endElement();
  }
}

Všimnite si, že jmeno je pridané ako element, ale vek len ako atribút. V reáli by bolo výhodnejšie použiť namiesto veku roku narodenia, ale chcel som, aby dátová štruktúra bola podobná ako v prepojenom článku.

Privátne objekt $registrovan má dátum uložené v 3 číslach. Je to len ukážka, ako pracovať s vnorenými objektmi. V reáli by som celý dátum uložil ako jednu hodnotu.

class Datum {
  private $den,$mesic,$rok;

  function __construct($rok,$mesic,$den) {
    $this->den=$den;
    $this->mesic=$mesic;
    $this->rok=$rok;
  }

  function exportXML($out) {
    $out->writeElement('registrovan',"$this->den.$this->mesic.$this->rok");
  }
}

A to je všetko. Po spustení skriptu som získal tieto výsledok:

<?xml version="1.0" encoding="UTF-8"?>
<uzivatele>
 <uzivatel vek="22">
  <jmeno>Pavel Slavík</jmeno>
  <registrovan>21.3.2000</registrovan>
 </uzivatel>
 <uzivatel vek="31">
  <jmeno>Jan Novák</jmeno>
  <registrovan>30.10.2012</registrovan>
 </uzivatel>
 <uzivatel vek="16">
  <jmeno>Tomáš Marný</jmeno>
  <registrovan>12.1.2011</registrovan>
 </uzivatel>
</uzivatele>

SAX je rýchlou a pamäťovo nenáročnú metódou, ako priamo vygenerovať dokument XML alebo XHTML. Ak však budete chcieť výstup ďalej spracovávať šablonovacím systémom, bude výhodnejšie použitie DOM, s ktorým šablónovacích systémami priamo pracujú.

Ešte varovanie: Vstupné dáta pre triedu XMLWriter musí byť v kódovaní UTF-8. Inak nebude fungovať správne po slovensky. Výstupný kódovanie je možné zvoliť podľa potreby.

V nasledujúcom cvičení, Riešené úlohy k 1.-2. lekciu práca so súbormi v PHP, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Predchádzajúci článok
Úvod do práce so súbormi v PHP
Všetky články v sekcii
Práca so súbormi v PHP
Preskočiť článok
(neodporúčame)
Riešené úlohy k 1.-2. lekciu práca so súbormi v PHP
Článok pre vás napísal Kit
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Jsem spokojeným uživatelem operačních systémů založených na linuxovém jádře. Zejména openSUSE a Ubuntu. Pro psaní veškerých textů a programů používám vynikající textový editor Vim. Aplikace se snažím psát vždy v tom nejvhodnějším programovacím jazyk...
Aktivity