PHP XML Expat analyysinvakooja
Kurssivinkki:
Sisäänrakennettu Expat-jäsennys mahdollistaa XML-dokumenttien käsittelyn PHP:ssä.
Mitä on XML?
XML:ssä ei ole ennakkoesityksiä. Sinun täytyy määritellä omat tagisi.
Jos haluat oppia lisää XML:stä, vieraile XML 教程.
Mitä on Expat?
Jos haluat lukea ja päivittää - luoda ja käsitellä - XML-dokumenttia, tarvitset XML-jäsennyksen.
On kaksi perusXML-jäsennyksen tyyppiä:
- Puurakenteen jäsennys: Tämä jäsennys muuntaa XML-dokumentin puurakenteeksi. Se analysoi koko dokumentin ja tarjoaa API:n elementtien, kuten dokumenttiobjektimallin (DOM), saamiseksi.
- Tapahtumapohjainen jäsennys: Katso XML-dokumentti sarjana tapahtumia. Kun tietty tapahtuma tapahtuu, jäsennys kutsuu funktioita käsittelemään sitä.
Expat-jäsennys on tapahtumapohjainen jäsennys.
Tapahtumapohjainen jäsennys keskittyy XML-dokumentin sisältöön, ei niiden tulokseen. Tämän vuoksi tapahtumapohjainen jäsennys voi saavuttaa tiedot nopeammin kuin puurakenteen jäsennys.
Katso seuraava XML-kappale:
<from>John</from>
Tapahtumapohjainen jäsennys kertoo yllä olevan XML:n kolmen tapahtuman sarjana:
- Aloita elementti: from
- Aloita CDATA-osio, arvo: John
- Sulje elementti: from
Yllä oleva XML-esimerkki sisältää muodoltaan hyvää XML:ää. Tämä esimerkki on kuitenkin kelvoton XML, koska siihen ei liity minkäänlaista dokumenttipyyntöä (DTD) eikä sisäänrakennettua DTD:ää.
Kuitenkin, Expat-jäsennyksen käytössä tämä ei ole eroa. Expat ei tarkista kelvollisuutta ja ohittaa kaikki DTD:t.
Saatuna tapahtumapohjaiseksi, ei-vahvisteteksi XML-jäsennykseksi Expat on nopea ja kevyt, erittäin sopiva PHP:n web-sovelluksille.
Huomautus:XML-dokumentin on oltava muodoltaan hyvä, muuten Expat luo virheitä.
Asennus
XML Expat-jäsennys on PHP-kärjen osa. Näitä funktioita voidaan käyttää ilman asennusta.
XML-tiedosto
Esimerkissämme käytämme seuraavaa XML-tiedostoa:
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>George</to> <from>John</from> <heading>Muistutus</heading> <body>Muista kokous!</body> </note>
Alusta XML-tulkki
Meidän täytyy PHP:ssä alustaa XML-tulkki, määrittää eri XML-tapahtumien käsittelijät ja sitten解析tämä XML-tiedosto.
esimerkki
<?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 参考手册。