php解析xml有三种方式:Expat、dom、simpleXML。
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>XiaoMing</to>
<from>xiaoZhao</from>
<heading>Booking</heading>
<body>Let's reading book.</body>
</note>
一、Expat方式,是一种基于事件的解析器
<?php
# 基于时间的解析器
echo "<p>PHP xml</p>";
// 初始化xml解析器
$parser = xml_parser_create();
// 使用开启标签的函数
function start($parser, $element_name, $element_attr){
switch($element_name){
case "NOTE":
echo "---Node---<br>";
break;
case "TO":
echo "To:";
break;
case "FROM":
echo "From";
break;
case "HEADING":
echo "Heading:";
break;
case "BODY":
echo "Message:";
break;
}
}
echo "<p>****************</p>";
// 使用结束标签做的事情
function stop($parser, $element_name){
echo "<br>";
}
// 对字符做的处理
function char($parser, $data){
echo $data;
}
echo "<p>read begin...</p>";
// 定义处理器,当遇到开始和结束标签所要做的动作
xml_set_element_handler($parser, "start", "stop");
// 定义处理器,当遇到字符要做的动作
xml_set_character_data_handler($parser, "char");
// 打开xml文件
$fp = fopen("php_text.xml","r");
// 读取数据
while($data=fread($fp,4096)){
echo $data;
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)));
}
// 释放xml解析器
xml_parser_free($parser);
?>
二、Dom方式,是基于树的解析器
<?php
# dom 把xml当做树状进行处理
$xmlDoc = new DOMDocument();
$xmlDoc ->load("php_text.xml");
print $xmlDoc->saveXML();
// 循环note中的所有元素
$x = $xmlDoc->documentElement;
foreach($x ->childNodes as $item){
print $item->nodeName." = ".$item->nodeValue. "<br>";
}
?>
三、simpleXml,将文档转化为对象
<?php
$xml = simplexml_load_file("php_text.xml");
echo $xml->getName()."<br>";
foreach($xml->children() as $child){
echo $child->getName()." : ". $child ."<br>";
}
?>