Samouczek PHP XML: tworzenie, analizowanie, czytanie z przykładem
⚡ Inteligentne podsumowanie
PHP i XML współpracują ze sobą, aby strukturyzować, przechowywać i wymieniać dane między systemami. W tym przewodniku wyjaśniono XML, DOM i parsery XML, a następnie pokazano, jak odczytać dokument XML za pomocą SimpleXML i jak go utworzyć za pomocą klasy DOMDocument, kończąc na tym, kiedy używać każdego z nich.

Co to jest XML?
XML to skrót od Extensible Markup Language.
XML służy do strukturyzowania, przechowywania i przesyłania danych pomiędzy systemami.
XML jest podobny do HTML. Używa znaczników otwierających i zamykających. W przeciwieństwie do HTML, XML pozwala użytkownikom definiować własne znaczniki.
Co to jest DOM?
DOM to skrót od Document Object Model.
Jest to wieloplatformowy i niezależny językowo standard, który definiuje sposób dostępu do danych i manipulowania nimi w:
- HTML
- XHTML
- XML
DOM XML służy do uzyskiwania dostępu do dokumentów XML i manipulowania nimi. To przegląda dokument XML jako struktura drzewa.
Parsery XML
Parser XML to program, który tłumaczy dokument XML na obiekt modelu DOM (Document Object Model) XML.
Obiektem XML DOM można następnie manipulować za pomocą Javascenariusz, Python, PHP i inne języki.
Słowo kluczowe CDATA, będące akronimem (nieprzetworzone) dane znakowe, służy do ignorowania znaków specjalnych, takich jak „<” i „>” podczas parsowania dokumentu XML.
Dlaczego warto używać XML-a?
- Usługi sieciowe, takie jak SOAP i REST, wykorzystują format XML do wymiany informacji. Poznanie XML i jego działania daje przewagę konkurencyjną jako programista, ponieważ nowoczesne aplikacje intensywnie korzystają z usług sieciowych.
- Dokumenty XML można wykorzystać do przechowywania ustawień konfiguracyjnych aplikacji.
- Umożliwia tworzenie własnych, niestandardowych tagów, co czyni je bardziej elastycznymi.
Przykład dokumentu XML
Załóżmy, że jesteś rozwijanyping aplikacja pobierająca dane z usługi sieciowej w formacie XML.
Poniżej znajduje się przykład wyglądu dokumentu XML.
<?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>
TUTAJ,
- „ „określa wersję XML i kodowanie, które mają być używane
- „ ” jest elementem głównym.
- „ … „są elementami podrzędnymi, po jednym na rekord pracownika.
Jak czytać XML za pomocą PHP
Napiszmy teraz kod, który będzie odczytywał dokument XML pracowników i wyświetlał wyniki w przeglądarce internetowej. 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>'; } ?>
TUTAJ,
- “$xml = simplexml_load_file('employees.xml');” używa funkcji simplexml_load_file do załadowania pliku o nazwie employees.xml i przypisania zawartości do zmiennej $xml.
- “$list = $xml->record;” pobiera zawartość węzłów rekordów.
- „for ($i = 0; $i < count(…)…” to pętla for, która odczytuje tablicę i wyprowadza wyniki
- „$list[$i]->atrybuty()->man_no;” odczytuje atrybut man_no elementu
- „$lista[$i]->nazwa;” odczytuje wartość elementu podrzędnego name
- „$lista[$i]->pozycja;” odczytuje wartość elementu podrzędnego pozycji
Testowanie czytnika XML
Zakładając, że zapisałeś plik index.php w folderze phptuts/xml, przejdź do URL http://localhost/phptuts/xml/index.php
Jak utworzyć dokument XML za pomocą PHP
Przyjrzymy się teraz, jak utworzyć dokument XML za pomocą PHP.
Poniższy kod wykorzystuje wbudowaną klasę PHP DOMDocument w celu utworzenia 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"; ?>
TUTAJ,
- “$dom = new DOMDocument();” tworzy instancję klasy DOMDocument.
- „$dom->kodowanie = 'utf-8';” ustawia kodowanie dokumentu na utf-8
- „$dom->xmlVersion = '1.0';” określa numer wersji 1.0
- „$dom->formatOutput = true;” gwarantuje, że dane wyjściowe są dobrze sformatowane
- „$root = $dom->createElement('Filmy');” tworzy węzeł główny o nazwie Filmy
- „$attr_movie_id = new DOMAttr('movie_id', '5467');” definiuje atrybut movie_id węzła filmu
- „$dom->createElement('ElementName', 'ElementValue')” tworzy węzeł podrzędny. ElementName określa nazwę elementu, np. Title. ElementValue ustawia wartość węzła podrzędnego, np. The Campaign.
- „$root->appendChild($movie_node);” dodaje węzeł filmu do węzła głównego Filmy
- „$dom->appendChild($root);” dołącza węzeł główny do dokumentu XML.
- „$dom->zapisz($xml_file_name);” zapisuje plik XML w katalogu głównym serwera WWW.
- „echo „$xml_file_name został pomyślnie utworzony”;” wyświetla komunikat o powodzeniu.
Testowanie XML Creator
Zakładając, że zapisałeś plik create_movies_list.php w folderze phptuts/xml, przejdź do URL http://localhost/phptuts/xml/create_movies_list.php
Otwórz plik movies_list.xml.
SimpleXML kontra DOMDocument
PHP oferuje dwa główne sposoby pracy z XML. SimpleXML sprawdza się najlepiej, gdy potrzebujesz głównie odczytywać dane, natomiast DOMDocument zapewnia lepszą kontrolę przy tworzeniu i intensywnej edycji dokumentów. Poniższa tabela porównuje te metody.
| WYGLĄD | SimpleXML | DOMDocument |
|---|---|---|
| Łatwość użycia | Bardzo proste; dokument zachowuje się jak zagnieżdżone obiekty | Bardziej szczegółowe API oparte na węzłach |
| Najlepszy dla | Czytanie i lekka edycja | Tworzenie dokumentów i złożona manipulacja |
| Styl dostępu | $xml->record->name | createElement() i appendChild() |
| Wsparcie XPath | Tak, poprzez ->xpath() | Tak, poprzez klasę DOMXPath |
Praktyczną zasadą jest sięganie w pierwszej kolejności do SimpleXML w celu odczytu kanałów i prostych plików, a następnie przejście na DOMDocument, gdy zachodzi potrzeba utworzenia dokumentów, wstawienia węzłów w określonych miejscach lub sprawdzenia zgodności ze schematem.



