PHP XML Expat Parser
Aanbevolen cursus:
De ingebouwde Expat-parser maakt het mogelijk om XML-documenten te verwerken in PHP.
Wat is XML?
In XML zijn er geen vooraf gedefinieerde tags. Je moet je eigen tags definiëren.
Als je meer wilt weten over XML, bezoek dan onze XML Handleiding.
Wat is Expat?
Voor het lezen en bijwerken - het maken en verwerken van een XML-document, heb je een XML-parser nodig.
Er zijn twee basis types van XML-parsers:
- Een boom gebaseerde parser: Deze parser convertteert het XML-document naar een boomstructuur. Het analyseert het hele document en biedt een API om toegang te krijgen tot de elementen in de boom, zoals het Document Object Model (DOM).
- Een evenement gebaseerde parser: Zie het XML-document als een reeks van evenementen. Wanneer een specifiek evenement optreedt, roept de parser een functie aan om het te verwerken.
De Expat-parser is een evenement gebaseerde parser.
Een evenement gebaseerde parser concentreert zich op de inhoud van het XML-document, niet op hun resultaat. Daarom kan een evenement gebaseerde parser sneller toegang krijgen tot gegevens dan een boom gebaseerde parser.
Zie het volgende XML-fragment:
<from>John</from>
Een evenement gebaseerde parser rapporteert het bovenstaande XML als een reeks van drie evenementen:
- Start element: from
- Start CDATA gedeelte, waarde: John
- Sluitende element: from
Het bovenstaande XML-voorbeeld bevat goed gevormde XML. Maar deze voorbeeld is ongeldig XML omdat er geen documenttypeverklaring (DTD) bijhangt, noch een ingesloten DTD.
Maar, er is geen verschil bij het gebruik van de Expat-parser. Expat is een parser die de validiteit niet controleert en elke DTD negeert.
Als een evenement gebaseerde, niet-geverifieerde XML-parser, is Expat snel en licht, zeer geschikt voor PHP-webtoepassingen.
Opmerking:Een XML-document moet goed gevormd zijn, anders zal Expat fouten genereren.
Installatie
De XML Expat-parser is een onderdeel van het PHP-kern. Deze functies kunnen zonder installatie worden gebruikt.
XML-bestand
In ons voorbeeld zullen we de volgende XML-bestand gebruiken:
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
Initialiseren van de XML-parser
We moeten de XML-parser in PHP initialiseren, processors definiëren voor verschillende XML-gebeurtenissen en vervolgens dit XML-bestand parseren.
Voorbeeld
<?php //Initialize the XML parser $parser=xml_parser_create(); //Function to use at the start of an element function start($parser,$element_name,$element_attrs) { switch($element_name) { case "NOTE": echo "-- Note --<br />"; break; case "TO": echo "To: "; break; case "FROM": echo "From: "; break; case "HEADING": echo "Heading: "; break; case "BODY": echo "Message: "; } } //Function to use at the end of an element function stop($parser,$element_name) { echo "<br />"; } //Function to use when finding character data function char($parser,$data) { echo $data; } //Specify element handler xml_set_element_handler($parser,"start","stop"); //Specify data handler xml_set_character_data_handler($parser,"char"); //Open XML file $fp=fopen("test.xml","r"); //Read data while ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) or die (sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); } //Vrijgeven van de XML parser xml_parser_free($parser); ?>
Uitvoer van de bovenstaande code:
-- Opmerking -- Aan: George Van: John Kop: Herinnering Bericht: Vergeet het vergadering niet!
Werkingsprincipe uitleg:
- Initialiseer de XML parser met de xml_parser_create() functie
- Maak functies om samen te werken met verschillende event handlers
- Voeg de xml_set_element_handler() functie toe om te definiëren welke functie wordt uitgevoerd wanneer de parser begint en eindigt met een element
- Voeg de xml_set_character_data_handler() functie toe om te definiëren welke functie wordt uitgevoerd wanneer de parser character data tegenkomt
- Gebruik de xml_parse() functie om het bestand "test.xml" te parseren
- Voeg de xml_error_string() functie toe om XML-fouten om te zetten in een tekstuele uitleg in het geval van fouten
- Gebruik de xml_parser_free() functie om de geheugen die is toegewezen aan de xml_parser_create() functie vrij te geven
Meer informatie over de PHP Expat Parser
Voor meer informatie over de PHP Expat Functies, bezoek onze PHP XML Parser Referenties.