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() 函数初始化 XML 解析器
$parser = xml_parser_create();
- 创建配合不同事件处理程序的的函数
元素开始时使用的函数
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: ";
}
}
元素末端使用的函数
function stop ($parser, $element_name) {
echo "<br />";
}
查找字符数据时使用的功能
function char ($parser, $data) {
echo $data;
}
指定元素的处理
xml_set_element_handler($parser, 'start', 'stop');
- 添加 xml_set_element_handler() 函数来定义,当解析器遇到开始和结束标签时执行哪个函数
指定数据处理程序
xml_set_element_handler($parser, 'start', 'stop');
- 添加 xml_set_character_data_handler() 函数来定义,当解析器遇到字
指定数据处理程序
xml_set_character_data_handler($parser, "char");
- 符数据时执行哪个函数5 通过 xml_parse() 函数来解析文件 "test.xml"
打开xml文件
$fp = fopen("test.xml", "r");
- 万一有错误的话,添加 xml_error_string() 函数把 XML 错误转换为文本说明
读取数据
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)));
}
- 调用 xml_parser_free() 函数来释放分配给 xml_parser_create() 函数的内存
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 =
/为转义
3. SimpleXML
输出test.xml
$xml = simpexml_load_file("test.xml");
print_r($xml);
输出结果
SimpleXMLElement Object ( [to] => Tove [from] => Belle [heading] => Reminder [body] => Don't forget me this weekend! )
输出每个元素的数据
$xml = simplexml_load_file("test.xml");
echo $xml->to . "<br />";
echo $xml->from . "<br />";
echo $xml->heading . "<br />";
echo $xml->body . "<br />";
输出结果
Tove
Belle
Reminder
Don't forget me this weekend!