XML to kolejny format danych jaki często spotykamy w Internecie. Na pliki tego typu można się natknąć w przypadku importu i eksportu danych w różnego rodzaju aplikacjach np. sklepach internetowych. Opanowanie parsowania czyli odczytu, zapisu i przetwarzania tego formatu rozszerzą nasze możliwości a nie raz pozwolą zrobić naprawdę ciekawe narzędzia, integracje oraz przydatne funkcjonalności.

Co to jest XML?

XML (ang. Extensible Markup Language) „Rozszerzalny język znaczników”, to uniwersalny, szeroko rozpowszechniony, prosty i elastyczny format zapisu struktur danych. Wykorzystywany głównie w Internecie wywodzący się z SGML.

Zasady konstruowania XML

Składniowo poprawny dokument XML posiada elementy rozpoczynające się znacznikiem otwierającym i zamykającym. Nazwy elementów stanowią znaki alfanumeryczne (ale nie mogą się zaczynać od cyfry). Elementy można zagnieżdżać i tworzyć hierarchię. Otwierający tag może posiadać atrybuty. Możemy też wykorzystać komentarze:

<?xml version="1.0"?>
<music>
   <artist name="Deftones">
      <album title="Ohms" year="2020">
         <track title="Genesis" length="5:17"/>
         <track title="Ceremony" length="3:27"/>
         <track title="Urantia" length="4:30">
            Jakaś wartość np. słowa utworu.
         </track>
         <!-- Pozostałe utwory -->
      </album>
   </artist>
   <artist name="Lady Gaga">
      <album title="Chromatica" year="2020">
         <track title="Chromatica I" length="1:00"/>
         <track title="Alice" length="2:57"/>
         <track title="Stupid Love" length="3:13"/>
         <!-- Pozostałe utwory -->
      </album>
   </artist>
</music>

XML możemy walidować na wiele różnych sposób, np. z wykorzystaniem narzędzi online: https://www.freeformatter.com/xml-validator-xsd.html

Odczyt plików XML w PHP (Import)

Taki kod XML można zapisać do pliku plik.xml. W PHP ładujemy plik do zmiennej $xmlString za pomocą znanej nam już funkcji file_get_contents(); Tworzymy referencję w zmiennej $xml do obiektu posługując się nazwą klasy SimpleXMLElement:

$xmlString = file_get_contents("plik.xml");
$xml = new SimpleXMLElement($xmlString);

Możemy teraz sprawdzić co otrzymaliśmy za pomocą:

var_dump($xml);

Pomiędzy polami możemy nawigować np. za pomocą ID:

$sampleTrack = $xml->artist[1]->album[0]->track[2];

Możemy też od razu wyświetlić wartości lub wartości atrybutów:

echo $xml->artist[1]->album[0]->track[2]["title"];
echo $xml->artist[0]->album[0]->track[2];

Możemy łatwo przekonwertować dane XML na postać tablicy PHP za pomocą biblioteki JSON:

$xmlarray = json_decode(json_encode($xml), TRUE);

W praktycznych scenariuszach używa się pętli foreach, która robi to co chcemy np. importuje dane wartości do bazy danych lub prezentuje określone dane.

Zapis plików XML w PHP (Eksport)

Pliki XML można też generować po stronie PHP. Użyjemy tutaj metod jakie dostarcza nam SimpleXML.

$myXML = new SimpleXMLElement("<music></music>");
$artist = $myXML->addChild('artist');
$artist->addAttribute('name', 'Carbon Based Lifeforms');
$album = $artist->addChild('album');
$album->addAttribute('title', 'ALT:02');
$album->addAttribute('year', '2020');
$track = $album->addChild('track');
$track->addAttribute('title', 'Metrosat 4');
$track->addAttribute('length', '8:27');
$track = $album->addChild('track');
$track->addAttribute('title', 'Supersede (First Version)');
$track->addAttribute('length', '9:24');
$track = $album->addChild('track', "Testowa zawartość…");
$track->addAttribute('title', 'Dreamshore Forest (Analog Remake)');
$track->addAttribute('length', '4:07');
header('Content-type: text/xml');
echo $myXML->asXML();

W przedostatniej linijce dodałem:

header('Content-type: text/xml');

ponieważ chcę aby nasz stworzony kod XML faktycznie był traktowany jak dane XML.

Wygenerowany XML za pomocą SimpleXML w PHP

Możemy zapisać zawartość zmiennej myXML do pliku. Służy do tego poznana we wcześniejszych artykułach instrukcja file_put_contents().

file_put_contents("plik2.xml", $myXML);

Jak widać, za pomocą metod jakie dostarcza biblioteka SimpleXML, możemy zbudować pełnoprawny dokument XML. Małym mankamentem może być fakt, że SimpleXML nie pozwoli nam na tworzenie komentarzy. Dobrą opinią cieszy się SimpleDOM.

Rozszerzenie SimpleDOM

SimpleDOM jest oparty na kodzie SimpleXML – używa jego składni i działa jako pomost pomiędzy DOM a SimpleXML dostarczając dodatkowe metody. Dodaje również kilka wygodnych metod, których nie ma w SimpleXML.

SimpleDOM to pojedynczy plik bez zależności. Wszystko, czego potrzebujesz, aby go użyć, to dołączyć go i utworzyć obiekty SimpleDOM zamiast obiektów SimpleXMLElement. Wystarczy użyć simpledom_load_string() zamiast simplexml_load_string().

Zastosowania XML

Tak jak pozostałe poznane już wcześniej formaty danych, przypomnijmy, że były to:

XML pozwala na komunikację pomiędzy systemami, import i eksport wartości w bazach danych. Umiejętność posługiwania się takimi formatami umożliwi odpowiednią obróbkę, processing danych co jest dosyć cenną umiejętnością w przypadku programowania stron i aplikacji internetowych a także w tematach związanych ze sztuczną inteligencją i uczeniem maszynowym. Ponieważ XML bazuje na systemie znaczników, może być przydatny w automatyzacji prac związanych z generowaniem, tworzeniem i analizowaniem stron internetowych.

Zalety XML

  • duża popularność, powszechność i staż w Informatyce,
  • można używać komentarzy,
  • duże wsparcie ze strony języków i środowisk programowania.
  • dostateczna czytelność danych dla człowieka.
  • niezależny od platformy.

Wady XML

  • większy rozmiar z powodu redundantnej syntaktyki za sprawą powtarzających się znaczników,
  • mniej czytelny niż JSON.

Porównanie XML i JSON

Porównanie JSON z XML – czym się różnią te formaty? Jedną z największych różnic pomiędzy XML a JSON jest fakt, że w technollogiach webowych np. AJAX, dokument XML trzeba parsować a potem pętlą zaczytywać dane zapisane w całym dokumencie do tymczasowych zmiennych.

Aplikacje webowe i technologie takie jak AJAX natywnie wspierają JSON. Nawet MySQL ma osobny typ danych do wspierania JSON. XML można zapisać w bazie MySQL jako dane TEXT.

Różnice pomiędzy XML i JSON przedstawia poniższa tabela.

XMLJSON
Opracowany w 1998 rokuOpracowany w 2001 roku
Można umieszczać komentarzeNie można umieszczać komentarzy
Cięższa, redundantna składniaLżejsza składnia
Nie można używać tablicMożna natywnie używać tablic
Wymaga parsera XMLNatywnie czytelny dla JavaScript
Trudniejsze parsowanieŁatwe parsowanie
Brak natywnego wsparcia MySQLNatywne wsparcie przez MySQL (źródło)
Tabela 1: Porównanie XML i JSON

Podsumowanie

XML to sprawdzony format danych który może mieć multum zastosowań. Niezależność od platformy czyni go kolejnym formatem, który może służyć jako pomost pomiędzy aplikacjami napisanymi w różnych językach i stworzonych za pomocą różnych technologii. Sprawne posługiwanie się tym formatem (jak i tymi poznanymi wcześniej: JSON i CSV) pozwoli pisać programy przetwarzające dane a także lepiej sobie radzić z nowoczesnymi problemami z dziedziny AI.

Źrodła

https://www.w3.org/XML/

https://www.php.net/manual/en/class.simplexmlelement.php

Oceń artykuł na temat: Parsowanie, odczyt i zapis plików XML w PHP
Średnia : 4.4 , Maksymalnie : 5 , Głosów : 9