PHP XML Expat Parser

Ang inbuild na parser ng Expat ay nagiging posibleng maproseso ang dokumentong XML sa PHP.

Ang XML ay ginagamit upang ilarawan ang datos, ang tungkulin nito ay kung ano ang datos.

Ano ang XML?

Wala ng pre-defined na tag sa XML. Kailangan mong mag-define ng iyong sariling tag.

Kung nais mong mabasa ng higit pa tungkol sa XML, mangyaring bisitahin ang aming XML 教程.

Ano ang Expat?

Kung nais kang basahin at i-update - lumikha at iproseso - isang dokumentong XML, kailangan mo ang parser ng XML.

May dalawang pangunahing uri ng parser ng XML:

  • Parser na nakabase sa puno: Ang uri ng parser na ito ay nag-convert ng dokumentong XML sa istruktura ng puno. Ito ay pinag-aaral ang buong dokumento, at nagbibigay ng API upang ma-access ang mga elemento sa puno, tulad ng Document Object Model (DOM).
  • Parser na nakabase sa pangyayari: Tinitingnan ang dokumentong XML bilang isang sunod-sunod na pangyayari. Kapag nangyayari ang isang partikular na pangyayari, ang parser ay tatawag ng function upang maiproseso ito.

Expat parser ay isang parser na nakabase sa pangyayari.

Ang parser na nakabase sa pangyayari ay nakatutok sa nilalaman ng dokumentong XML, hindi sa kanilang resulta. Kaya, ang parser na nakabase sa pangyayari ay maaaring ma-access ng mas mabilis kaysa sa parser na nakabase sa puno.

Mangyaring tingnan ang sumusunod na bahagi ng XML:

<from>John</from>

Ang parser na nakabase sa pangyayari ay naglalarawan ng itaas na XML bilang isang sunod-sunod na tatlong pangyayari:

  • Simulan ang elemento: from
  • Simulan ang bahagi ng CDATA, halaga: John
  • Isara ang elemento: from

Ang nakalagay na halimbawa ng XML ay naglalaman ng maayos na XML. Gayunpaman, ang halimbawa na ito ay hindi wastong XML, sapagkat walang nakatalaga na DTD (Document Type Declaration) na nauugnay dito, o walang nakasampang DTD.

Gayunpaman, walang pagkakaiba sa paggamit ng parser ng Expat. Ang Expat ay hindi nangangailangan ng pagpapatunay ng pagkakaroon ng pagkakaroon ng validity, at nililinaw ang anumang DTD.

Bilang isang parser ng XML na nakabase sa pangyayari at hindi nangangailangan ng pagpapatunay, ang Expat ay mabilis at liwanag, napaka-gugustuhin sa mga web application na nakabase sa PHP.

Komentaryo:Ang XML dokumento ay dapat maayos sa hugis, kung hindi Expat ay magbibigay ng error.

Pag-install

Ang XML Expat parser ay bahagi ng core ng PHP. Hindi kailangan ng pag-install para gamitin ang mga function na ito.

XML file

Ginagamit sa aming halimbawa ang sumusunod na XML file:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Paalaala</heading>
<body>Wala kang alam ang pagpupulong!</body>
</note>

Iinitialize ang XML parser

Kailangan nating iinitialize ang XML parser sa PHP, upang magbigay ng processer para sa iba't ibang XML event, at pagkatapos ay i-parse ang file na XML.

例子

<?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)));
  }
//Free the XML parser
xml_parser_free($parser);
?>

以上代码的输出:

-- Note --
To: George
From: John
Heading: Reminder
Message: Don't forget the meeting!

工作原理解释:

  • 通过 xml_parser_create() 函数初始化 XML 解析器
  • 创建配合不同事件处理程序的的函数
  • 添加 xml_set_element_handler() 函数来定义,当解析器遇到开始和结束标签时执行哪个函数
  • 添加 xml_set_character_data_handler() 函数来定义,当解析器遇到字符数据时执行哪个函数
  • 通过 xml_parse() 函数来解析文件 "test.xml"
  • 万一有错误的话,添加 xml_error_string() 函数把 XML 错误转换为文本说明
  • 调用 xml_parser_free() 函数来释放分配给 xml_parser_create() 函数的内存

更多 PHP Expat 解析器的信息

如需更多有关 PHP Expat 函数的信息,请访问我们的 PHP XML Parser 参考手册。