• 技术文章 >后端开发 >php教程

    php simplexmlElement操作xml的命名空间实现代码_php技巧

    2016-05-17 09:21:55原创457
    看了这个问题,第一个反应就是namespace的关系,但我从来没有使用simplexml操作过namespace,于是就翻开手册查了一下资料,问题并没有解决,最终是通过google解决了该问题。

    提问题的朋友贴出了数据源,来自于:http://code.google.com/intl/zh-CN/apis/contacts/docs/3.0/developers_guide_protocol.html#retrieving_without_query,数据结构大致如下:
    复制代码 代码如下:


    liz@gmail.com
    2008-12-10T10:04:15.446Z

    Elizabeth Bennet's Contacts





    Elizabeth Bennet
    liz@gmail.com

    Contacts
    1
    1
    25

    http://www.google.com/m8/feeds/contacts/liz%40gmail.com/base/c9012de
    2008-12-10T04:45:03.331Z
    2008-12-10T04:45:03.331Z

    Fitzwilliam Darcy

    Fitzwilliam Darcy




    456





    这个结构在上面的地址里有,这个是我格式化过的XML数据,现在要取得类似于“ 456 ”中的值。

    最终代码如下:
    复制代码 代码如下:

    $x = new SimpleXmlElement($str);
    foreach($x->entry as $t){
    echo $t->id . "
    ";
    echo $t->updated . "
    ";
    $namespaces = $t->getNameSpaces(true);
    $gd = $t->children($namespaces['gd']);
    echo $gd->phoneNumber;
    }

    当然,如果不象上面这样写,也可以写成这样:
    复制代码 代码如下:

    $x = new SimpleXmlElement($str);
    foreach($x->entry as $t){
    echo $t->id . "
    ";
    echo $t->updated . "
    ";
    //$namespaces = $t->getNameSpaces(true);
    //注意这里与上面一段的区别
    $gd = $t->children('http://schemas.google.com/g/2005');
    echo $gd->phoneNumber;
    }

    只是象第二种写法就属于硬编码了,这样不太好,万一哪天有变化,还得再更改N多代码。
    问题接踵而来,比如象下面这段:
    复制代码 代码如下:



    Learn QB in Minutes
    9

    02/12/2009
    02/12/2009
    11
    30

    NOT_INPROGRESS

    PUBLIC


    这种非标准的XML,没有定义命名空间,怎么办?在这种情况下,其实SimpleXmlElement就已经直接可以解决了,但是会报warnging,因为他认为event这个命名空间不存在。
    解决方法是:
    复制代码 代码如下:

    $xml = @new SimpleXmlElement($str);//在前面加@抑止错误。
    echo "
    "; 
    print_r($xml);

    目前看来,这种解决方法比较好。

    PHP SimpleXML 函数 相关资料
    http://www.jb51.net/w3school/php/php_ref_simplexml.htm
    PHP SimpleXML
    http://www.jb51.net/w3school/php/php_xml_simplexml.htm
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:simplexmlElement
    上一篇:PHP strncasecmp字符串比较的小技巧_php技巧 下一篇:PHP中=赋值操作符对不同数据类型的不同行为_php技巧
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP8.2最新进展,即将进行新特性冻结!• PHP8.2将有哪些改动(性能改进、新特性)!• 限制上传文件类型程序代码_PHP教程• 如何文档化你的PHP类(一)_PHP教程• php实现文件下载更能介绍_PHP教程
    1/1

    PHP中文网