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 extensible markup language, formรกt zaloลพenรฝ na tagech, kterรฝ umoลพลˆuje definovat vlastnรญ tagy pro strukturovรกnรญ a pล™enos dat.
  • ???? DOM: Objektovรฝ model dokumentu (DOM) zobrazuje dokument XML nebo HTML jako strom, takลพe kรณd mลฏลพe prochรกzet uzly a upravovat je.
  • ๐Ÿ”„ Analyzรกtory XML: Parser pล™evรกdรญ XML dokument na objekt DOM, kterรฝ PHP, JavaSkripta, popล™ Python mลฏลพe ฤรญst a mฤ›nit.
  • ๐Ÿ“– ฤŒtenรญ XML: simplexml_load_file naฤte soubor do objektลฏ, takลพe k zรกznamลฏm pล™istupujete pomocรญ syntaxe ลกipek, napล™รญklad $xml->record->name.
  • ๐Ÿ› ๏ธ Vytvรกล™enรญ XML: Tล™รญda DOMDocument vytvรกล™รญ dokument uzel po uzlu pomocรญ metod createElement a appendChild a potรฉ metodou save zapisuje soubor.
  • ๐Ÿ‡ง๐Ÿ‡ท SimpleXML vs. DOM: SimpleXML se rychle ฤitรญ, zatรญmco DOMDocument se hodรญ pro pล™esnou tvorbu a sloลพitou manipulaci.
  • ๐Ÿค– AI Assist: Nรกstroje umฤ›lรฉ inteligence dokรกลพรญ generovat parsovacรญ kรณd pro specifickou strukturu XML a pล™evรกdฤ›t mezi poli XML, JSON a PHP.

PHP a XML

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

ฤŒtenรญ XML pomocรญ 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

Vytvoล™te XML dokument pomocรญ PHP

Otevล™ete soubor movies_list.xml.

Vytvoล™te XML dokument pomocรญ PHP

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.

Nejฤastฤ›jลกรญ dotazy

Oba formรกty uklรกdajรญ strukturovanรก data, ale XML pouลพรญvรก tagy a podporuje atributy, komentรกล™e a schรฉmata, zatรญmco JSON je jednoduลกลกรญ a mapuje se pล™รญmo na pole a objekty. JSON je bฤ›ลพnรฝ pro API; XML je vhodnรฝ pro dokumenty a konfiguraci.

Naฤtฤ›te soubor pomocรญ SimpleXML nebo DOMDocument, zmฤ›ลˆte hodnoty nebo atributy uzlu a potรฉ jej zapiลกte zpฤ›t. V SimpleXML upravte vlastnost a zavolejte asXML('file.xml'); v DOMDocument upravte uzel a zavolejte save().

XPath je dotazovacรญ jazyk pro vรฝbฤ›r uzlลฏ v XML dokumentu. V PHP zavolejte $xml->xpath('//record/name') s SimpleXML nebo pouลพijte tล™รญdu DOMXPath pro naฤtenรญ odpovรญdajรญcรญch prvkลฏ bez nutnosti vyhledรกvรกnรญ.ping skrz celรฝ strom.

Ano. Umฤ›lรก inteligence dokรกลพe generovat kรณd pomocรญ simplexml_load_string, json_encode a json_decode pro pล™evod mezi formรกty a oznaฤovat data, kterรก se nemapujรญ ฤistฤ›, jako jsou atributy XML nebo smรญลกenรฝ obsah. Ovฤ›ล™te vรฝsledek.

Ano. Vloลพte vzorek vaลกeho XML a umฤ›lรก inteligence mลฏลพe vytvoล™it kรณd SimpleXML nebo DOMDocument, kterรฝ pล™eฤte pล™esnรฉ prvky a atributy, kterรฉ potล™ebujete, vฤetnฤ› smyฤek pro opakovanรฉ zรกznamy. Otestujte to na skuteฤnรฝch souborech.

Shrลˆte tento pล™รญspฤ›vek takto: