首页 > PHP教程 > php开发知识文章

PHP4和PHP5语言版本解析XML文档的方法

这篇文章主要介绍了PHP4和PHP5语言版本解析XML文档的方法,结合实例形式分析了php4与php5环境下解析xml文档的相关实现技巧与注意事项。

在PHP网站开发与建设过程中,会碰到需要对XML文档进行解析,PHP4版本自带了XML解析器(sax),

PHP5版本增加了SimpleXML(基于dom)的XML扩展,对XML的解析更是非常方便。

XML文档

可扩展标记语言是一种很像超文本标记语言的标记语言。设计宗旨是传输数据,而不是显示数据。

它的标签没有被预定义。您需要自行定义标签。它被设计为具有自我描述性。它是W3C的推荐标准

<?xml version="1.0" encoding="gbk"?>
<LeapsoulXML>
<LeapsoulInfo>
<name>Leapsoul-PHP网站开发</name>
<website>http://www.yuqingqi.com</website>
<description>PHP网站开发与建设,教你如何建立网站</description>
<bloger>a1</bloger>
<date>2018-02-13</date>
<qq>QQ:123456</qq>
</LeapsoulInfo>
<LeapsoulInfo>
<name>PHP网站开发</name>
<website>http://www.yuqingqi.com</website>
<description>PHP网站开发与建设</description>
<bloger>aa</bloger>
<date>2017-06-13</date>
<qq>QQ:123456</qq>
</LeapsoulInfo>
</LeapsoulXML>

PHP5版本下SimpleXML的使用方法

$info=simplexml_load_file('aa.xml');
$name=$info->LeapsoulInfo[0]->name;
foreach($info->LeapsoulInfoas as $LeapsoulInfo)
{
echo $LeapsoulInfo->name."<br />";
echo $LeapsoulInfo->website."<br />";
echo $LeapsoulInfo->description."<br />";
echo $LeapsoulInfo->bloger."<br />";
echo $LeapsoulInfo->date."<br />";
echo $LeapsoulInfo->qq."<br />";
}
foreach($info->xpath('//name')as$value){
echo$value.'<br />';
}
foreach($info->LeapsoulInfo[0]->children()as$value){
echo $value->getName();
echo $value.'<br />';
}
$info->LeapsoulInfo[0]->addChild('wx','wx:aa');
$info->asXML('aa.xml');

php代码注释

第1行:simplexml_load_file:读取一个xml文档作为操作对象,读取本地或者远程xml文档;simplexml_load_string:读取一个xml字符串作为操作的对象

simplexml解析返回的对象具有数组结构。

第5~8行:以对象方式读取某个XML文档节点信息,读取方式:句柄->节点元素名->子节点,如果相同的节点元素有多个,则以数组(array)方式读取

注:由于simplexml解析返回的信息是UTF8格式的,如果网站使用的是GBK的,则需要转码,使用iconv函数或者其他的utf8与gbk转换函数进行操作,如:$name = iconv('utf-8′,'gbk',$name);

第9~17行:以遍历的形式,读取所有元素下的子节点信息

第19~21行:simplexml的xpath函数是用来查询XML数据的,比如这里查询的是所有name节点的值

第23~26行:children函数是用来找寻某个特定节点下所有子节点的值。getName函数用来获得每个子节点的元素名称

第28~29行:addChild函数用来在某个特定节点下增加一个子节点,asXML函数对已做过改动的XML文档进行保存

PHP4版本自带的XML函数解析方法

function doStartElement($xmlParser, $name, $attr)
{
//对开始元素的处理
}

function doEndElement($xmlParser, $name)
{
//对结尾元素的处理
}

function doStringData($xmlParser, $data)
{
//对元素间的字符数据的处理
}

$xmlObj = xml_parser_create("UTF-8");
xml_set_element_handler($xmlObj, "doStartElement", "doEndElement");
xml_set_character_data_handler($xmlObj, "doStringData");
xml_parse($xmlObj, file_get_contents("aa.xml"));
xml_parser_free($xmlObj);

代码注释

第1~15行:定义开始元素,结尾元素以及元素间字符数据的处理函数

第16行:建立一个新的XML解析器并返回可被其它XML函数使用的资源句柄,输入默认编码方式为 “ISO-8859-1”。

同时,支持的编码方式还有“UTF-8”和 “US-ASCII”,输出数据编码方式是和xml_parser_create函数处定义相一致。

第18行:建立起始和终止元素处理器

第20行:建立字符数据处理器,处理元素之间的相关数据

注:XML语法解析器不会加上或者去掉任何空格,空格的取舍将由开发者自己决定。

第22行:启动解析器xml_parse函数第二个参数是字符型的,所以需要读取相关的XML文档信息,此处我用的是file_get_contents函数,本地远程都可行,当然你也可以使用fopen函数

第24行:XML解析完成后,释放解析器占用的内存

自带的XML函数解析思路

第一步:自定义开始元素,结尾元素以及元素间字符数据的处理函数;
第二步:建立一个XML解析器;
第三步:建立起始和终止元素处理器;
第四步:建立字符数据处理器,处理元素之间的相关数据;
第五步:启动解析器;
第六步:XML解析完成后,释放解析器占用的内存。

总结:

PHP自带的XML解析器使用起来相当繁琐,需要有较强的逻辑,而且如果XML文档结构不同,元素、字符等3个函数需要重新定义,

而在PHP5版本增加了SimpleXML扩展后,XML解析起来非常简单,当然如果你需要进行更复杂的XML文档解析操作,下载安装并使用libxml,功能相当强。

以上就是本文PHP4和PHP5语言版本解析XML文档的方法的全部内容,希望本文所述对大家PHP程序设计有所帮助。

PHP语言使用xpath语言解析XML的方法详解

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。