PHP XML Tutorial: Opret, parse, læs med eksempel
⚡ Smart opsummering
PHP og XML arbejder sammen om at strukturere, lagre og udveksle data mellem systemer. Denne gennemgang forklarer XML, DOM og XML-parsere, viser derefter, hvordan man læser et XML-dokument med SimpleXML, og hvordan man opretter et med DOMDocument-klassen, og slutter af med, hvornår man skal bruge hver af dem.

Hvad er XML?
XML er forkortelsen for Extensible Markup Language.
XML bruges til at strukturere, gemme og transportere data fra ét system til et andet.
XML minder om HTML. Det bruger åbne- og lukketags. I modsætning til HTML giver XML brugerne mulighed for at definere deres egne tags.
Hvad er DOM?
DOM er forkortelsen for Document Object Model.
Det er en tværplatforms- og sprogneutral standard, der definerer, hvordan man tilgår og manipulerer data i:
- HTML
- XHTML
- XML
DOM XML bruges til at få adgang til og manipulere XML-dokumenter. Det ser XML-dokumentet som en træstruktur.
XML-parsere
En XML-parser er et program, der oversætter XML-dokumentet til et XML Document Object Model (DOM)-objekt.
XML DOM-objektet kan derefter manipuleres ved hjælp af Javamanuskript, Python, PHP og andre sprog.
Nøgleordet CDATA, som er et akronym for (unparsed) Character Data ((ikke-parsede) tegndata), bruges til at ignorere specialtegn som "<" og ">", når et XML-dokument parses.
Hvorfor bruge XML?
- Webtjenester som SOAP og REST bruger XML-formatet til at udveksle information. At lære, hvad XML er, og hvordan det fungerer, giver dig en konkurrencefordel som udvikler, da moderne applikationer i høj grad bruger webtjenester.
- XML-dokumenter kan bruges til at gemme konfigurationsindstillingerne for et program.
- Det giver dig mulighed for at oprette dine egne brugerdefinerede tags, hvilket gør det mere fleksibelt.
Eksempel på XML-dokument
Lad os antage, at du er udvikletping en applikation, der henter data fra en webtjeneste i XML-format.
Nedenfor er et eksempel på, hvordan XML-dokumentet ser ud.
<?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>
HER,
- " "angiver den XML-version og kodning, der skal bruges
- “ ” er rodelementet.
- " … " er de underordnede elementer, ét pr. medarbejderpost.
Sådan læser du XML ved hjælp af PHP
Lad os nu skrive den kode, der læser medarbejdernes XML-dokument og viser resultaterne i en webbrowser. 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>'; } ?>
HER,
- "$xml = simplexml_load_file('employees.xml');" bruger funktionen simplexml_load_file til at indlæse filen med navnet employees.xml og tildele indholdet til variablen $xml.
- "$list = $xml->record;" henter indholdet af record-noderne.
- "for ($i = 0; $i < count(…)..." er for-løkken, der læser arrayet og udskriver resultaterne
- "$list[$i]->attributes()->man_no;" læser man_no-attributten for elementet
- "$list[$i]->navn;" læser værdien af navnet underordnet element
- "$list[$i]->position;" læser værdien af positionsunderelementet
Test af XML-læseren
Hvis du har gemt filen index.php i mappen phptuts/xml, skal du gå til URL http://localhost/phptuts/xml/index.php
Sådan opretter du et XML-dokument ved hjælp af PHP
Vi vil nu se på, hvordan man opretter et XML-dokument ved hjælp af PHP.
Følgende kode bruger den indbyggede PHP-klasse DOMDocument til at oprette et XML-dokument.
<?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"; ?>
HER,
- "$dom = new DOMDocument();" opretter en instans af DOMDocument-klassen.
- "$dom->encoding = 'utf-8';" indstiller dokumentkodningen til utf-8
- "$dom->xmlVersion = '1.0';" angiver versionsnummer 1.0
- "$dom->formatOutput = sand;" sikrer, at outputtet er godt formateret
- "$root = $dom->createElement('Film');" opretter rodnoden med navnet Movies
- "$attr_movie_id = new DOMAttr('movie_id', '5467');" definerer movie_id-attributten for filmnoden.
- "$dom->createElement('ElementName', 'ElementValue')" opretter en underordnet node. ElementName angiver navnet på elementet, f.eks. Titel. ElementValue angiver værdien for underordnet node, f.eks. Kampagnen.
- "$root->appendChild($movie_node);" tilføjer filmnoden til rodnoden Film
- "$dom->appendChild($root);" føjer rodnoden til XML-dokumentet.
- "$dom->save($xml_file_name);" gemmer XML-filen i rodmappen på webserveren.
- "echo "$xml_file_name er blevet oprettet";" viser en succesmeddelelse.
Test af XML'en Creator
Hvis du har gemt filen create_movies_list.php i mappen phptuts/xml, skal du gå til URL http://localhost/phptuts/xml/create_movies_list.php
Åbn filen movies_list.xml.
SimpleXML vs. DOMDocument
PHP tilbyder to primære måder at arbejde med XML på. SimpleXML er bedst, når du primært har brug for at læse data, mens DOMDocument giver finere kontrol til at opbygge og redigere dokumenter i store mængder. Tabellen nedenfor sammenligner dem.
| Aspect | SimpleXML | DOM-dokument |
|---|---|---|
| Brugervenlighed | Meget simpelt; dokumentet opfører sig som indbyggede objekter | Mere detaljeret, nodebaseret API |
| Bedste for | Læsning og lysredigering | Oprettelse af dokumenter og kompleks manipulation |
| Adgangsstil | $xml->post->navn | createElement() og appendChild() |
| XPath-understøttelse | Ja, via ->xpath() | Ja, via DOMXPath-klassen |
En praktisk regel er først at bruge SimpleXML til at læse feeds og simple filer, og derefter skifte til DOMDocument, når du skal oprette dokumenter, indsætte noder på bestemte positioner eller validere mod et skema.



