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 38218×
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
|
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ů
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|