LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> PHP (59) - zapisujeme XML

Číst soubory XML už umíme. Ale jak je zapisovat? Ukažme si na několik způsobů.

22.10.2004 15:00 | Petr Zajíc | Články autora | přečteno 31947×

Komerční sdělení: Pořádáme Kurzy PHP

V předchozích dvou dílech seriálu jsme si ukázali, jak pomocí funkcí parseru číst hotové dokumenty XML. To se samozřejmě hodí v případě, kdy již máme nějaký ten XML soubor k dispozici. Co ale dělat v případě, kdy naopak bude chtít někdo XML soubor po nás?

Taková situace není nereálná. Jelikož, jak jsme uvedli, slouží XML převážně pro výměnu dat, může nějaký externí systém požadovat po naší aplikaci data v XML. Projděme si tedy několik způsobů, jak takovou úlohu splnit.

Ruční způsob

S tímto způsobem jsme se již seznámili v díle o exportu dat z MySQL. Jen připomenu, že se jednalo o přímý zápis dat a značky se dopisovaly do výstupního souboru (nebo do výstupního proudu) ručně. Tento způsob je pracný a zejména při vytváření složitěji strukturovaných XML dokumentů můžeme snadno udělat chybu. Jádro kódu pro export dat do XML vypadalo následovně:

<?
  
echo("<obce>\n");
  while (
$row = mysql_fetch_assoc ($vysledek))
  {
    echo (
"\t<obec>\n");
    echo (
"\t\t<psc>\n");
    echo
"\t\t\t".$row["psc"]."\n";
    echo (
"\t\t</psc>\n");
    echo (
"\t\t<nazev>\n");
    echo
"\t\t\t".$row["obec"]."\n";
    echo (
"\t\t</nazev>\n");
    echo (
"\t</obec>\n");
  }
  echo(
"</obce>\n");
?>

Ruční způsob nedoporučuji. Povede nejspíš ke zmatkům; nemluvě o situaci, kdy budeme potřebovat změnit strukturu exportovaného dokumentu. Daleko lepší bude poohlédnout se po nějakém elegantnějším řešení.

Serializer

Jednou z mnoha možností je využít hotovou knihovnu serializer. Té stačí předat pole (nebo objekt) a seznam voleb, a vrátí hotový XML dokument. Nejprve to předveďme:

<?
  
//data
  
require("Serializer.php");
  
// zde je include souboru s konstantami
  
mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD);
  
mysql_select_db(SQL_DBNAME);
  
$vysledek = mysql_query ("SELECT * FROM psc WHERE psc=47001");
  while (
$row = mysql_fetch_array($vysledek))
    
$xml[] = array ( "nazev" => $row[0], "psc" => $row[1]);
  
//serializace
  
$options = array( "addDecl" => true,  "defaultTagName" => "obec",
  
"linebreak" => "",  "encoding" => "UTF-8",  "rootName" => "obce");
  
$serializer = new XML_Serializer($options);
  
$serializer->serialize($xml);
  
// výstup
  
header("Content-Type: text/xml");
  echo
$serializer->getSerializedData();
?>

Spustit skript

Poznamenejme rovnou, že tento způsob je daleko elegantnější než ruční varianta. Rovněž stojí za zmínku, že v případě většiny exportů (například, v případě exportu z jedné MySQL tabulky) bude vytvoření pole poměrně triviální záležitost a tudíž celý kód nejenom dobře poběží, ale bude rovněž hezky vypadat.

Pozn.: To je vidět na příkladu výše. Povšimněme si, že zatímco funkce mysql_fetch_array vkládá každý řádek do pole, funkce array vkládá toto pole ... (ano!) zase do pole. $xml je jednorozměrné pole tvořené prvky, z nichž každý je rovněž jednorozměrné pole. Komu se z toho točí hlava, může nahlédnout do dílu seriálu o polích.

DOM

DOM, neboli Document Object Model je jiný mechanizmus pro čtení (anebo zápis) XML dokumentů. Spočívá v tom, že se celý XML dokument nejprve načte do paměti, tam se zanalyzuje a pak se k němu přistupuje pomocí objektového modelu. To zní dobře. Podpora DOM je implementována v mnoha programovacích jazycích, v PHP však není tak dobrá, jak by mohla být. Pokud znáte mechanismus fungování DOM z jiných programovacích jazyků, pravděpodobně po něm sáhnete i v PHP. Měli byste ale mít na paměti následující věci:

  • PHP musí být přeloženo s podporou DOM. Pokud nebude, nebude Vám fungovat ani související kód
  • Některé DOM funkce zastarávají. Jak se PHP vyvíjí, jeho implementace DOM prochází rovněž bouřlivým vývojem (momentálně je zastaralých 18(!) funkcí, což by mě rozhodně rozladilo, kdybych DOM v PHP používal)
  • Implementace DOM se LIŠÍ v PHP4 a PHP5. Takže, v "pětce" Vám "čtyřkový" kód volající DOM může a nemusí fungovat.
  • Pokud chcete ladit (nebo provozovat?) PHP na Windows, pamatujte na to, že instalace a konfigurace DOM pro PHP může znamenat roční kopírování knihoven do systémové složky.

Ostatní

Uvedené metody pochopitelně nejsou jediné způsoby, jak s pomocí PHP vytvářet XML dokumenty. Pokud máte jiný osvědčený způsob, můžete se s námi podlěit v diskusi. Každopádně, než se rozhodnete preferovat některou z variant, měli byste vzít v úvahu takové věci, jako je rychlost, čitelnost kódu, rozšiřitelnost a bezpečnost. Koneckonců, výsledek záleží na Vás.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

8.5.2016 17:19 /Redakce Linuxsoft.cz
PR: Dne 26.5.2016 proběhne v Praze konference Cloud computing v praxi. Tématy bude např. nejnovější trendy v oblasti cloudu a cloudových řešení, cloudové služby, infrastruktura cloudu, efektivní využití cloudu, možné nástrahy cloudů a jak se jim vyhnout
Přidat komentář

21.4.2016 8:01 /František Kučera
Spolek OpenAlt zve na 127. distribuovaný sraz příznivců svobodného softwaru a otevřených technologií (hardware, 3D tisk, SDR, DIY, makers…), který se bude konat ve čtvrtek 28. dubna od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

2.3.2016 22:41 /Ondřej Čečák
Letošní ročník konference InstallFest již tento víkend!
Přidat komentář

14.2.2016 16:39 /Redakce Linuxsoft.cz
O víkendu 5. a 6. března 2016 proběhne na pražském Strahově 8. ročník tradiční konference InstallFest. Celkem za dva dny uvidíte ​30 přednášek​ a ​6 workshopů.
Přidat komentář

5.2.2016 17:38 /Petr Ježek
Utilitka z XFce "xfce4-power-manager" nejen umožňuje nastavení lhůty pro uspání či hybernaci, ale i zapínání a vypínání prezentačního módu pro nerušené sledování videí. Stačí ji nastavit v každém vybavenějším panelu a v jakémkoli nontiled WM/DE.
Přidat komentář

10.1.2016 11:32 /Pavel `Goldenfish' Kysilka
LinuxMarket změnil provozovatele. Nově jej provozuje Marek Pszczolka. Více info a detaily #1 a #2.
Přidat komentář

29.12.2015 11:38 /Ondřej Čečák
Ještě posledních pár dní můžete přidávat příspěvky nebo nápady na Install Fest 2016, který se bude konat 5. a 6. března 2016.
Přidat komentář

8.12.2015 11:36 /Petr Ježek
Logické se stává realitou. LibreOffice a Thunderbird se mají dle článku na Redditu stát protiváhou MS řešení (MS Office a Outlook).
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

10.6.2016 21:10 / pavel riha
FreeBSD 10.3 a virtualizace

8.6.2016 21:56 / Milan Gallas
Nevalidní prefix m

7.5.2016 14:58 / Teodor Komárek
Soubory

20.4.2016 0:07 / Jakub Cleing
Sázkový panel PHP FUSION

9.4.2016 9:43 / jiwopene@gmail.com
Re: problém s dpkg a nemožností instalovat

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2016) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze