PHP XML Tutorial: Create, Parse, Read with Example
โก Chytrรฉ shrnutรญ
PHP a XML spolupracujรญ na strukturovรกnรญ, uklรกdรกnรญ a vรฝmฤnฤ dat mezi systรฉmy. Tento nรกvod vysvฤtluje XML, DOM a analyzรกtory XML, potรฉ ukazuje, jak ฤรญst dokument XML pomocรญ SimpleXML a jak jej vytvoลit pomocรญ tลรญdy DOMDocument, a konฤรญ tรญm, kdy je pouลพรญt.

Co je XML?
XML je zkratka pro Extensible Markup Language.
XML se pouลพรญvรก ke strukturovรกnรญ, uklรกdรกnรญ a pลenosu dat z jednoho systรฉmu do druhรฉho.
XML je podobnรฝ HTML. Pouลพรญvรก otevรญracรญ a uzavรญracรญ tagy. Na rozdรญl od HTML umoลพลuje XML uลพivatelลฏm definovat si vlastnรญ tagy.
Co je DOM?
DOM je zkratka pro Document Object Model.
Jednรก se o multiplatformnรญ a jazykovฤ neutrรกlnรญ standard, kterรฝ definuje, jak pลistupovat k datลฏm a jak je manipulovat s nimi v:
- HTML
- XHTML
- XML
DOM XML se pouลพรญvรก k pลรญstupu a manipulaci s dokumenty XML. To zobrazรญ dokument XML jako stromovรก struktura.
XML Parsery
XML parser je program, kterรฝ pลevรกdรญ XML dokument do objektu XML Document Object Model (DOM).
Objekt XML DOM lze potรฉ manipulovat pomocรญ JavaSkript, Python, PHP a dalลกรญ jazyky.
Klรญฤovรฉ slovo CDATA, coลพ je zkratka pro (unparsed) Character Data (neanalyzovanรก) znakovรก data), se pouลพรญvรก k ignorovรกnรญ speciรกlnรญch znakลฏ, jako jsou โ<โ a โ>โ, pลi analรฝze dokumentu XML.
Proฤ pouลพรญvat XML?
- Webovรฉ sluลพby jako SOAP a REST pouลพรญvajรญ k vรฝmฤnฤ informacรญ formรกt XML. Znalost toho, co je XML a jak funguje, vรกm jako vรฝvojรกลi poskytuje konkurenฤnรญ vรฝhodu, protoลพe modernรญ aplikace webovรฉ sluลพby hojnฤ vyuลพรญvajรญ.
- Dokumenty XML lze pouลพรญt k uklรกdรกnรญ konfiguraฤnรญch nastavenรญ aplikace.
- Umoลพลuje vรกm vytvรกลet si vlastnรญ ลกtรญtky, coลพ je flexibilnฤjลกรญ.
Pลรญklad dokumentu XML
Pลedpoklรกdejme, ลพe se vyvรญjรญteping aplikace, kterรก zรญskรกvรก data z webovรฉ sluลพby ve formรกtu XML.
Nรญลพe je uveden pลรญklad toho, jak vypadรก XML dokument.
<?xml version="1.0" encoding="utf-8"?> <employees status = "ok"> <record man_no = "101"> <name>Joe Paul</name> <position>CEO</position> </record> <record man_no = "102"> <name>Tasha Smith</name> <position>Finance Manager</position> </record> </employees>
TADY,
- โ โurฤuje verzi XML a kรณdovรกnรญ, kterรฉ se mรก pouลพรญtโ
- โ โ je koลenovรฝ prvek.
- โ โฆ โ jsou podลรญzenรฉ prvky, jeden na zรกznam zamฤstnance.
Jak ฤรญst XML pomocรญ PHP
Nynรญ napiลกme kรณd, kterรฝ naฤte XML dokument zamฤstnancลฏ a zobrazรญ vรฝsledky ve webovรฉm prohlรญลพeฤi. index.php
<?php $xml = simplexml_load_file('employees.xml'); echo '<h2>Employees Listing</h2>'; $list = $xml->record; for ($i = 0; $i < count($list); $i++) { echo '<b>Man no:</b> ' . $list[$i]->attributes()->man_no . '<br>'; echo 'Name: ' . $list[$i]->name . '<br>'; echo 'Position: ' . $list[$i]->position . '<br><br>'; } ?>
TADY,
- โ$xml = simplexml_load_file('employees.xml');โ pouลพรญvรก funkci simplexml_load_file k naฤtenรญ souboru s nรกzvem employees.xml a pลiลazenรญ jeho obsahu promฤnnรฉ $xml.
- โ$list = $xml->record;โ vracรญ obsah uzlลฏ zรกznamลฏ.
- โfor ($i = 0; $i < count(โฆ)โฆโ je smyฤka for, kterรก ฤte pole a vypisuje vรฝsledky
- โ$list[$i]->attributes()->man_no;โ pลeฤte atribut man_no prvku
- โ$list[$i]->name;โ pลeฤte hodnotu podลรญzenรฉho prvku name
- โ$list[$i]->position;โ pลeฤte hodnotu podลรญzenรฉho prvku pozice
Testovรกnรญ ฤteฤky XML
Za pลedpokladu, ลพe jste soubor index.php uloลพili do sloลพky phptuts/xml, pลejdฤte do URL http://localhost/phptuts/xml/index.php
Jak vytvoลit XML dokument pomocรญ PHP
Nynรญ se podรญvรกme na to, jak vytvoลit XML dokument pomocรญ PHP.
Nรกsledujรญcรญ kรณd pouลพรญvรก vestavฤnou tลรญdu PHP DOMDocument k vytvoลenรญ dokumentu XML.
<?php $dom = new DOMDocument(); $dom->encoding = 'utf-8'; $dom->xmlVersion = '1.0'; $dom->formatOutput = true; $xml_file_name = 'movies_list.xml'; $root = $dom->createElement('Movies'); $movie_node = $dom->createElement('movie'); $attr_movie_id = new DOMAttr('movie_id', '5467'); $movie_node->setAttributeNode($attr_movie_id); $child_node_title = $dom->createElement('Title', 'The Campaign'); $movie_node->appendChild($child_node_title); $child_node_year = $dom->createElement('Year', 2012); $movie_node->appendChild($child_node_year); $child_node_genre = $dom->createElement('Genre', 'Comedy'); $movie_node->appendChild($child_node_genre); $child_node_ratings = $dom->createElement('Ratings', 6.2); $movie_node->appendChild($child_node_ratings); $root->appendChild($movie_node); $dom->appendChild($root); $dom->save($xml_file_name); echo "$xml_file_name has been successfully created"; ?>
TADY,
- โ$dom = new DOMDocument();โ vytvoลรญ instanci tลรญdy DOMDocument.
- โ$dom->encoding = 'utf-8';โ nastavรญ kรณdovรกnรญ dokumentu na utf-8
- โ$dom->xmlVersion = '1.0';โ urฤuje ฤรญslo verze 1.0
- โ$dom->formatOutput = true;โ zajiลกลฅuje, ลพe vรฝstup je dobลe naformรกtovanรฝ
- โ$root = $dom->createElement('Filmy');โ vytvoลรญ koลenovรฝ uzel s nรกzvem Movies
- โ$attr_movie_id = new DOMAttr('movie_id', '5467');โ definuje atribut movie_id uzlu filmu
- โ$dom->createElement('ElementName', 'ElementValue')โ vytvoลรญ podลรญzenรฝ uzel. ElementName urฤuje nรกzev elementu, napล. Title. ElementValue nastavuje hodnotu podลรญzenรฉho uzlu, napล. The Campaign.
- โ$root->appendChild($movie_node);โ pลipojรญ uzel filmu ke koลenovรฉmu uzlu Filmy
- โ$dom->appendChild($root);โ pลipojรญ koลenovรฝ uzel k dokumentu XML.
- โ$dom->save($xml_file_name);โ uloลพรญ soubor XML do koลenovรฉho adresรกลe webovรฉho serveru.
- โecho โ$xml_file_name byl รบspฤลกnฤ vytvoลenโ;โ zobrazรญ zprรกvu o รบspฤchu.
Testovรกnรญ XML Creator
Za pลedpokladu, ลพe jste soubor create_movies_list.php uloลพili do sloลพky phptuts/xml, pลejdฤte do URL http://localhost/phptuts/xml/create_movies_list.php
Otevลete soubor movies_list.xml.
SimpleXML vs. DOMDocument
PHP nabรญzรญ dva hlavnรญ zpลฏsoby prรกce s XML. SimpleXML je nejlepลกรญ, kdyลพ potลebujete hlavnฤ ฤรญst data, zatรญmco DOMDocument poskytuje jemnฤjลกรญ kontrolu pro vytvรกลenรญ a rozsรกhlรฉ รบpravy dokumentลฏ. Nรญลพe uvedenรก tabulka je porovnรกvรก.
| Vzhled | SimpleXML | DOMDocument |
|---|---|---|
| Snadnรฉ pouลพitรญ | Velmi jednoduchรฉ; dokument se chovรก jako vnoลenรฉ objekty | Podrobnฤjลกรญ API zaloลพenรฉ na uzlech |
| Nejlepลกรญ pro | ฤtenรญ a lehkรก editace | Vytvรกลenรญ dokumentลฏ a sloลพitรก manipulace |
| Styl pลรญstupu | $xml->zรกznam->nรกzev | createElement() a appendChild() |
| Podpora XPath | Ano, pลes ->xpath() | Ano, prostลednictvรญm tลรญdy DOMXPath |
Praktickรฝm pravidlem je nejprve sรกhnout po SimpleXML pro ฤtenรญ kanรกlลฏ a jednoduchรฝch souborลฏ a pลepnout na DOMDocument, kdyลพ potลebujete vytvรกลet dokumenty, vklรกdat uzly na konkrรฉtnรญ pozice nebo validovat schรฉma.



