Archiv rubriky „XML“
SimpleXML - jednoduše na XML v PHP 2.díl
Jsem tu opět s povídáním o používání SimpleXML v PHP. V minulém díle jste se dozvěděli základy používání a hlavně také jakým způsobem číst jednoduše dokument XML. Dnes bychom se měli zabývat čtením smíšeného obsahu.
11. 12. 2009 | gisat_cz | 0
SimpleXML - jednoduše na XML v PHP 1.díl
Hlavním tématem tohoto článku je pokus o jednoduchý exkurz do práce s XML. Určitě mnohokrát se Vám stalo, že jste při svém programování v PHP narazili na potřebu komunikovat se souborem v tomto formátu. Právě jednou možnou cestou je použití tzv. SimpleXML.
8. 12. 2009 | gisat_cz | 0
Čtení XML v PHP pomocí parseru
Před tím, než začnu popisovat základní principy nakládání se soubory XML v prostředí programovacího jazyka PHP, si musíme ujasnit co to vlastně soubory XML jsou.
Soubory ve formátu XML jsou v současnosti velmi hojně využívány. Jedná se totiž o univerzální typ. Moderní technologie jsou hojně založeny na tomto formátu. Je velmi jednoduchý a přehledný. Narozdíl od HTML není tak spjatý s konvencemi, můžete vytvářet tagy podle svého. To co si nemůžete dovolit v HTML si můžete naopak dovolit zde. XML nám umožňuje vytvářet sktrukturované dokumenty. “Sktrukturované” znamená, že budou obsahovat “značky” a “znaky”.
Existuje spoustu technik zpracování XML v jazyku PHP. My si zde ukážeme jeden z možných způsobů. Budeme číst dokument XML pomocí parseru .
První co si vytvoříme bude XML soubor:
<?xml version=”1.0″ encoding=”UTF-8″?>
<adresy stav_k=”26. červnu 2009″ typ=”obce s rozsirenou pusobnosti,obce”>
<oblast typ=”obec_s_rozsir_pusob” nazev=”AŠ” kraj=”KARLOVARSKÝ” okres=”CHEB”>
<obec nazev=”AŠ” muzi=”6638″ zeny=”6858″/>
<obec nazev=”HAZLOV” muzi=”846″ zeny=”834″/>
<obec nazev=”HRANICE” muzi=”1097″ zeny=”1168″/>
</oblast>
<oblast typ=”obec_s_rozsir_pusob” nazev=”BENEŠOV” kraj=”STŘEDOČESKÝ” okres=”BENEŠOV”>
<obec nazev=”BENEŠOV” muzi=”8011″ zeny=”8646″/>
<obec nazev=”BUKOVANY” muzi=”351″ zeny=”350″/>
</oblast>
</adresy>
XML soubory můžete vytvářet v jakémkoli editoru, například v Notepadu, Dreamweavru, či nějakém dalším. Co výše uvedený kód znamená? Postupně si projdeme jednotlivé řádky našeho kódu:
<?xml version=”1.0″ encoding=”UTF-8″?>
Tímto deklarujete dokument XML a také u něj stanovíte patřičné kódování. Stanovení kódování je velmi důležité, zařídíte tak, aby se text zobrazoval správně. Abych byl přesný ono kódování nemusí být uvedené v dokumentu XML, ale můžeme ho uvést v onom “tajemném” parseru.
Každý XML dokument má tzv. kořenový element, zde element <adresy>, ostatní elementy jsou vloženy do těla kořenového elementu. Vytváření XML dokumentů se pokusím nastínit v některém pozdějším článku.
Vytvoření souboru zpracuj_xml.php:
Druhým krokem vytvoříte soubor zpracuj_xml.php, v něm budeme číst obsah XML dokumentu, respektive zobrazíme atribut nazev elementu obec:
Nejprve vytvoříme XML parser pomocí funkce xml_parser_create. Pokud by došlo k nějaké chybě, parser by vrátil false. Zde, jak bylo řečeno, také do závorek funkce můžeme uvést patřičné kódování(ISO-8859-1 nebo UTF-8).
$parser=xml_parser_create();
//—————————————————-
Vytvoříme obsluhu počátečního tagu elementu, tedy co se má po počáteční značce udělat. V našem případě zjistíme pomocí funkce PHP (pro regulární výrazy:eregi) jestli název elementu obsahuje slovo obec a pokud ano tak se vypíše hodnota jeho atributu označeného slovem název.
Funkce pro obsluhu počátečního tagu elementu, by měla ve svých argumentech obsahovat na prvním místě proměnou pro paeser, dále proměnou pro jméno počátečního tagu elementu a naposled proměnou pro atributy .
function zacatek_elem($parser,$jmeno,$atributy) {
if(eregi(”obec”, $jmeno)){
echo $atributy["NAZEV"].”<br/>”;
}
}
//——————————————————
Vytvoříme obsluhu koncového tagu elementu. Možná se Vám tento krok zdá být zbytečným, ale rozhodně tomu tak není. Uvedení funkcí pro obsluhy počátečních i koncových tagů elementů musí být vždy uvedeny. Funkce pro obsluhu koncového tagu elementu by měla ve svých argumentech obsahovat ma prvním místě proměnou parseru a poté jméno koncového tagu elementu:
function konec_elem($parser,$nazev) {}
//——————————————————-
Parser bude číst tento kód a narazí na počáteční a konečný tag elementu a proto musíme tzv. zaregistrovat obslužné funkce daného elementu. Registraci provedeme pomocí funkce xml_set_element_handler, opět jeho parametry jsou, proměná parseru, funkce pro obsluhu počátečního a koncového tagu elementu. Obě dvě funkce uvedeme v uvozovkách bez parametrů:
xml_set_element_handler($parser,”zacatek_elem”,”konec_elem”);
//——————————————————–
Dále nás čeká jen načíst XML soubor a umožnit tak vypsání atributů nazev elementu obec:
Otevřeme XML dokument
$nazev_souboru_xml=”acko.xml”;
Pokud nedojde k otevření dokumentu vypíše se varovná hláška
if(!($soubor = fopen($nazev_souboru_xml,”r”))) {
die(”Nelze otevřít soubor “.$nazev_souboru_xml.”!”);
}
else {
A pak budeme predavat data parseru (treba po 4096 bytech):
while ($d = fread($soubor, 4096)) {
if(!xml_parse($parser, $d, feof($soubor))) {
die(”Chyba XML”);
}}}
//————————————————-
Pokud jste vše dělali správně, výsledek by měl vypadat takto: pod sebou napsány jména měst uvedených v atributech název elementu obec.
17. 7. 2009 | gisat_cz | 0


