zoukankan      html  css  js  c++  java
  • 简述PHP4和PHP5版本下解析XML文档的操作方法

    在PHP网站开发与建设过程中,时常会碰到需要对XML文档进行解析,PHP4版本自带了XML解析器(sax),PHP5版本增加了SimpleXML(基于dom)的XML扩展,对XML的解析更是非常方便,今天和大家分享下在不同环境下对XML文档进行解析的方法。
    XML文档

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?xml version="1.0" encoding="gbk"?>
    <LeapsoulXML>
    <LeapsoulInfo>
    <name>Leapsoul-PHP网站开发</name>
    <website>http://www.leapsoul.cn</website>
    <description>分享PHP网站开发与建设的乐趣,教你如何建立网站</description>
    <bloger>David</bloger>
    <date>2009-05-13</date>
    <qq>QQ:154130270</qq>
    </LeapsoulInfo>

    <LeapsoulInfo>
    <name>Leapsoul-PHP网站开发</name>
    <website>http://www.leapsoul.cn</website>
    <description>分享PHP网站开发与建设的乐趣,教你如何建立网站</description>
    <bloger>David</bloger>
    <date>2009-05-13</date>
    <qq>QQ:154130270</qq>
    </LeapsoulInfo>
    </LeapsoulXML>

    PHP5版本下SimpleXML的使用方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    $info=simplexml_load_file('leapsoulcn.xml');

    print_r($info);

    $name=$info->LeapsoulInfo[0]->name;

    echo$name;

    foreach($info->LeapsoulInfoas$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('msn','MSN:davidfaithman@hotmail.com');
    $info->asXML('leapsoulcn.xml');

    代码注释

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

    第3行:如果不清楚如何获取某个节点的信息,可用print_r函数打印输出查看具体的结构,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文档进行保存

    点击查看更多SimpleXML函数说明。

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    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("leapsoulcn.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,功能相当强。

    PHP网站开发教程-leapsoul.cn版权所有,转载时请以链接形式注明原始出处及本声明,谢谢。

  • 相关阅读:
    转发 微博 Qzone 微信 草根创业英雄时代落幕:贾跃亭戴威们一去不复返
    python 发送大Json格式数据
    python post json数据
    python post 参数
    IntelliJ Idea 常用10款插件(提高开发效率)
    IDEA操作技巧:一些常用且实用的插件
    nacos
    Sentinel 与 Hystrix 的对比
    阿里启动新项目:Nacos,比 Eureka 更强!
    D3.js学习(一)
  • 原文地址:https://www.cnblogs.com/zcy_soft/p/1935293.html
Copyright © 2011-2022 走看看