PHP XML

1. XML Expat 解析器(基于事件)

工作原理

使用的xml文件test.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note>
  1. 通過 xml_parser_create() 函數(shù)初始化 XML 解析器
$parser = xml_parser_create();
  1. 創(chuàng)建配合不同事件處理程序的的函數(shù)
    元素開始時(shí)使用的函數(shù)
function start ($patser, $element_name, $element_attrs) {
       switch ($element_name) {
           case "NONE":
               echo "-- Note --<br />";
               break;
           case "TO":
               echo "To: ";
               break;
           case "FROM":
               echo "From: ";
               break;
           case "HEADING":
               echo "Heading: ";
               break;
           case "BODY":
               echo "message: ";
       }
   }

元素末端使用的函數(shù)

function stop ($parser, $element_name) {
        echo "<br />";
    }

查找字符數(shù)據(jù)時(shí)使用的功能

function char ($parser, $data) {
        echo $data;
    }

指定元素的處理

xml_set_element_handler($parser, 'start', 'stop');
  1. 添加 xml_set_element_handler() 函數(shù)來定義,當(dāng)解析器遇到開始和結(jié)束標(biāo)簽時(shí)執(zhí)行哪個(gè)函數(shù)
    指定數(shù)據(jù)處理程序
xml_set_element_handler($parser, 'start', 'stop');
  1. 添加 xml_set_character_data_handler() 函數(shù)來定義,當(dāng)解析器遇到字
    指定數(shù)據(jù)處理程序
xml_set_character_data_handler($parser, "char");
  1. 符數(shù)據(jù)時(shí)執(zhí)行哪個(gè)函數(shù)5 通過 xml_parse() 函數(shù)來解析文件 "test.xml"
    打開xml文件
$fp = fopen("test.xml", "r");
  1. 萬一有錯(cuò)誤的話,添加 xml_error_string() 函數(shù)把 XML 錯(cuò)誤轉(zhuǎn)換為文本說明
    讀取數(shù)據(jù)
while ($data = fread($fp,4096)) {
        xml_parse($parser, $data, feof($fp))
        or die(sprintf("XML Error: %s at lone %d",
            xml_error_string(xml_get_error_code($parser)),
            xml_get_current_line_number($parser)));
    }
  1. 調(diào)用 xml_parser_free() 函數(shù)來釋放分配給 xml_parser_create() 函數(shù)的內(nèi)存
xml_parser_free($parser);

輸出效果

To: Tove
From: Belle
Heading: Reminder
message: Don't forget me this weekend!

2. XML DOM(基于樹)

初始化xml解析器

$xmlDoc = new DOMDocument();

加載xml

$xmlDoc->load("test.xml");

遍歷xml中所有元素

$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item) {
      print $item->nodeName . " = " . $item->nodeValue . "<br>";
}

輸出效果

/#text =
/to = Tove
/#text =
from = Belle
/#text =
heading = Reminder
/#text =
body = Don't forget me this weekend!
/#text =
/為轉(zhuǎn)義

3. SimpleXML

輸出test.xml

$xml = simpexml_load_file("test.xml");
print_r($xml);

輸出結(jié)果

SimpleXMLElement Object ( [to] => Tove [from] => Belle [heading] => Reminder [body] => Don't forget me this weekend! )

輸出每個(gè)元素的數(shù)據(jù)

$xml = simplexml_load_file("test.xml");
    echo $xml->to . "<br />";
    echo $xml->from . "<br />";
    echo $xml->heading . "<br />";
    echo $xml->body . "<br />";

輸出結(jié)果

Tove
Belle
Reminder
Don't forget me this weekend!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • /* * This file is part of the overtrue/wechat. * * (c) ov...
    聚齊閱讀 270評(píng)論 0 0
  • PHP常用函數(shù)大全 usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對(duì)數(shù)據(jù)進(jìn)行解...
    上街買菜丶迷倒老太閱讀 1,492評(píng)論 0 20
  • php usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對(duì)數(shù)據(jù)進(jìn)行解包。 uni...
    思?jí)鬚HP閱讀 2,133評(píng)論 1 24
  • 1. XML簡介 以下內(nèi)容來自于http://www.w3school.com.cn/xml 基本知識(shí) XML 和...
    WebSSO閱讀 2,092評(píng)論 1 7
  • XML處理是開發(fā)過程中經(jīng)常遇到的,PHP對(duì)其也有很豐富的支持,本文只是對(duì)其中某幾種解析技術(shù)做簡要說明,包括:Xml...
    海邊拾貝閱讀 798評(píng)論 0 3

友情鏈接更多精彩內(nèi)容