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>
- 通過 xml_parser_create() 函數(shù)初始化 XML 解析器
$parser = xml_parser_create();
- 創(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');
- 添加 xml_set_element_handler() 函數(shù)來定義,當(dāng)解析器遇到開始和結(jié)束標(biāo)簽時(shí)執(zhí)行哪個(gè)函數(shù)
指定數(shù)據(jù)處理程序
xml_set_element_handler($parser, 'start', 'stop');
- 添加 xml_set_character_data_handler() 函數(shù)來定義,當(dāng)解析器遇到字
指定數(shù)據(jù)處理程序
xml_set_character_data_handler($parser, "char");
- 符數(shù)據(jù)時(shí)執(zhí)行哪個(gè)函數(shù)5 通過 xml_parse() 函數(shù)來解析文件 "test.xml"
打開xml文件
$fp = fopen("test.xml", "r");
- 萬一有錯(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)));
}
- 調(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!