PHP XML Expat Parser

Anbefalet kursus:

Indbygget Expat parser gør det muligt at behandle XML-dokumenter i PHP.

Hvad er XML?

I XML findes der ingen prædefinerede tags. Du skal definere dine egne tags.

Hvis du vil lære mere om XML, besøg vores XML undervisning.

Hvad er Expat?

Hvis du vil læse og opdatere - oprette og behandle - en XML-dokument, har du brug for en XML-parser.

Der er to grundlæggende typer af XML-parser:

  • Træ-baseret parser: Denne parser konverterer XML-dokumentet til en træstruktur. Den analyserer hele dokumentet og tilbyder en API til at få adgang til elementer i træet, såsom dokumentobjektmodellen (DOM).
  • Event-baseret parser: Ser XML-dokumentet som en række af begivenheder. Når en specifik begivenhed opstår, kalder parseren funktioner til at håndtere den.

Expat parseren er en event-baseret parser.

En event-baseret parser fokuserer på indholdet af XML-dokumentet, ikke deres resultat. Af den grund kan en event-baseret parser få adgang til data hurtigere end en træ-baseret parser.

Se nedenstående XML-sektion:

<from>John</from>

En event-baseret parser rapporterer det ovenstående XML som en række af tre begivenheder:

  • Start element: from
  • Start CDATA-sektion, værdi: John
  • Luk element: from

Den ovenstående XML-eksempel indeholder korrekt formateret XML. Men dette eksempel er ugyldigt XML, fordi det ikke har en tilhørende dokumenttypeforklaring (DTD) eller en indlejret DTD.

Men der er ingen forskel på, hvordan Expat parseren bruges. Expat er en parser, der ikke tjekker gyldighed, og ignorerer enhver DTD.

Som en event-baseret, ikke-validerende XML-parser er Expat hurtig og let, og det er meget egnet til PHP's web-applikationer.

Kommentarer:XML-dokumentet skal være korrekt formateret, ellers vil Expat generere fejl.

Installation

XML Expat parser er en del af PHP-kernen. Der er ingen behov for at installere for at bruge disse funktioner.

XML-fil

Vores eksempel vil bruge følgende XML-fil:

<?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>

Initialiser XML-parseren

Vi skal initialisere XML-parseren i PHP, definere håndterere for forskellige XML-hændelser, og derefter analysere denne XML-fil.

Eksempel

<?php
//Initialiser XML-parseren
$parser=xml_parser_create();
//Funktion at bruge ved begyndelsen af et element
function start($parser,$element_name,$element_attrs)
  {
  switch($element_name)
    {
    case "NOTE":
    echo "-- Bemærk --<br />";
    break; 
    case "TO":
    echo "Til: ";
    break; 
    case "FROM":
    echo "Fra: ";
    break; 
    case "HEADING":
    echo "Overskrift: ";
    break; 
    case "BODY":
    echo "Besked: ";
    }
  }
//Funktion at bruge ved slutningen af et element
function stop($parser,$element_name)
  {
  echo "<br />";
  }
//Funktion at bruge ved findning af karakterdata
function char($parser,$data)
  {
  echo $data;
  }
//Angiv elementhåndterer
xml_set_element_handler($parser,"start","stop");
//Angiv datahåndterer
xml_set_character_data_handler($parser,"char");
//Åbn XML-fil
$fp=fopen("test.xml","r");
//Læs 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)));
  }
//Frigiv XML-parseren
xml_parser_free($parser);
?>

Uddata fra ovenstående kode:

-- Bemærkninger --
Til: George
Fra: John
Overskrift: Påmindelse
Besked: Don't forget the meeting!

Arbejdsprincippet forklaring:

  • Initialiser XML-parseren ved hjælp af xml_parser_create() funktionen
  • Opret funktioner, der passer til forskellige begivenhedshåndteringsprogrammer
  • Tilføj xml_set_element_handler() funktionen for at definere, hvilken funktion der skal udføres, når parseren møder begyndelses- og afslutningstags
  • Tilføj xml_set_character_data_handler() funktionen for at definere, hvilken funktion der skal udføres, når parseren møder tegndata
  • Analyser filen "test.xml" ved hjælp af xml_parse() funktionen
  • Hvis der opstår fejl, tilføj xml_error_string() funktionen for at konvertere XML-fejl til tekstbeskrivelser
  • Kald xml_parser_free() funktionen for at frigive hukommelsen, der er tildelt af xml_parser_create() funktionen

Mere information om PHP Expat parseren

For mere information om PHP Expat funktioner, besøg vores PHP XML Parser referencehåndbog.