PHP创建与解析XML
一.使用SimpleXML操控XML要处理XML文件,有两种传统的处理思路:SAX和DOM.SAX基于事件触发机制,对XML文件进行一次扫描,完成要进行的处理;DOM则将整个XML文件构造为一颗DOM树,通过对DOM树的遍历完成处理.这两种方法各有优缺点,SAX的处理思路相对抽象,DOM的处理过程相对烦琐,都不很适合新手的入门.
PHP5退出一套新的XML处理函数,即SimpleXML.名如其实,SimpleXML本身小巧精干,只提供了少量的几个方法的函数,单用它处理起XML文件功能却非常强大,操作也非常的简单
1.创建XML文件
[PHP] 纯文本查看 复制代码
<?php
$_xml=<<<xml
<?xml version="1.0" encoding='utf-8'?>
<root>
<version>1.0</version>
<info>xml解析测试</info>
<user>
<author sex="男">张三</author>
<age>23</age>
</user>
<user>
<author sex="女">李四</author>
<age>24</age>
</user>
<user>
<author sex="男">王五</author>
<age>25</age>
</user>
</root>
xml;
//创建对象解析xml字符串
$_sxe = new SimpleXMLElement($_xml);
//在当前目录下,生成XML文件
$_sxe->asXML('./test.xml');
?>
效果图:
2.载入XML文件
[PHP] 纯文本查看 复制代码
<?php
$_sxe = simplexml_load_file("./test.xml");
var_dump($_sxe);//输出相关信息
print_r($_sxe);//输出主要信息
Reflection::export(new ReflectionClass($_sxe));//用反射查看详情
?>
效果图:
3.解析XML文件
[PHP] 纯文本查看 复制代码
<?php
header("Content-type:text/xml");
$_sxe = simplexml_load_file("test.xml");//载入XML文件
echo $_sxe->asXML();//打印整个XML
?>
效果图:
4.读出XML数据
[PHP] 纯文本查看 复制代码
<?php
$_sxe = simplexml_load_file("test.xml");//载入XML文件
//读取一级节点的值,比如version标签
echo $_sxe->version;
echo '<hr/>';
//如果有多个,可以设置它的数字下标
echo $_sxe->version[0];
echo '<hr/>';
//如果想要全部打印出来,可以用遍历
foreach($_sxe->version as $_version){
echo '['.$_version.']';
}
//访问二级节点的author
echo $_sxe->user[0]->author;
echo '<hr/>';
//获取所有二级节点的name值
foreach($_sxe->user as $_user){
echo '[' . $_user->author .']';
}
echo '<hr/>';
//获取二级节点的标签的属性
echo $_sxe->user[0]->author->attributes();
?>
效果图:
5.使用XPath来获取节点
[PHP] 纯文本查看 复制代码
<?php
$_sxe = simplexml_load_file("test.xml");//载入XML文件
//使用Xpath获取节点信息
$_verson = $_sxe->xpath("/root/version");
echo $_version[1];
//遍历version
foreach($_version as $_v){
echo '[' . $_v .']';
}
//访问二级节点
$_user = $_sxe->xpath('/root/user');
echo $_user[2]->name;
//遍历二级节点
foreach($_user as $_u){
echo '['. $u->name .']';
}
//访问属性
echo $_user[1]->author->attributes();
?>
效果图:
二.使用DOMDocument操作XML很多情况下,手工生成标记要求从上到下生成文档,必须保证标签都是完整的,开始和结束标签.尽管借助于一些PHP函数或类可以有所改善,不过PHP还提供了一组更有帮助的内置对象和函数.文档对象模型(Document Object Model,DOM)提供了一个树桩结构,能很容易创建和处理标签.
1.DOMDocument生成XML
[PHP] 纯文本查看 复制代码
<?php
//声明xml
$_doc = new DOMDocument('1.0','utf-8');
//排版格式
$_doc->formatOutput = true;
//创建一个主标签
$_root = $_doc->createElement('root');
//创建一个一级标签version
$_version = $_doc->createElement('version');
//给version标签里赋值
$_versionTextNode = $_doc->createTextNode('1.0');
//将值放入version标签里
$_version->appendChild($_versionTextNode);
//将一级标签version放入root里
$_root->appendChild($_version);
//将主标签写入xml
$_doc->appendChild($_root);
//生成xml
$_doc->save('aaa.xml');
?>
效果图:
2.DOMDocument解析XML
[PHP] 纯文本查看 复制代码
<?php
//创建一个DOMDocument()
$_doc = new DOMDocument();
//载入xml
$_doc->load('test.xml');
//取version标签
$_version =$_doc->getElementsByTagName('version');;
echo $_version->item(2)->nodeValue;
//遍历version标签
foreach($_version as $v){
echo $v->nodeValue;
}
?>