php中simplexml_load_string使用实例分享


Posted in PHP onFebruary 13, 2014

先用一段代码重现一下问题

乍一看,结果很让人费解:

<?php 
$string = <<<EOF 
<data> 
<foo><bar>hello</bar></foo> 
<foo><bar>world</bar></foo> 
</data> 
EOF;
$data = simplexml_load_string($string);
print_r($data); 
print_r($data->foo); 
?>

乍一看,结果很让人费解:

SimpleXMLElement Object 
( 
[foo] => Array 
( 
[0] => SimpleXMLElement Object 
( 
[bar] => hello 
) 
[1] => SimpleXMLElement Object 
( 
[bar] => world 
) 
) 
) 
SimpleXMLElement Object 
( 
[bar] => hello 
)

明明print_r显示foo是一个有两个bar元素的数组,但是最后却仅仅显示了一个bar元素!
原因其实很简单,在如上所示simplexml_load_string的结果里,foo并不是数组,而是一个迭代对象!
可以这样确认:

foreach ($data->foo as $v) print_r($v); 
foreach ($data->children() as $v) print_r($v);

看来,print_r或者var_dump之类的表象并不完全可信,自己多留心吧。

假如我们获取的XML数据如下:(可以使用curl、fsockopen等方式获取)

<?xml version="1.0" encoding="UTF-8"?>
<dict num="219" id="219" name="219">
 <key>你好</key>
 <pos></pos>
 <acceptation>Array;Array;Array;</acceptation>
 <sent>
  <orig>Haven't seen you for a long time. How are you?</orig>
  <trans>多日不见了,你好吗?</trans>
 </sent>
 <sent>
  <orig>Hello! How are you?</orig>
  <trans>嘿,你好?</trans>
 </sent>
 <sent>
  <orig>Hello, Brooks!How are you?</orig>
  <trans>喂,布鲁克斯!你好吗?</trans>
 </sent>
 <sent>
  <orig>Hi, Barbara, how are you?</orig>
  <trans>嘿,芭芭拉,你好吗?</trans>
 </sent>
 <sent>
  <orig>How are you? -Quite well, thank you.</orig>
  <trans>你好吗?-很好,谢谢你。</trans>
 </sent>
</dict>

经过simplexml_load_string得到:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [num] => 219
            [id] => 219
            [name] => 219
        )
    [key] => 你好
    [pos] => SimpleXMLElement Object
        (
        )
    [acceptation] => Array;Array;Array;
    [sent] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [orig] => Haven't seen you for a long time. How are you?
                    [trans] => 多日不见了,你好吗?
                )
            [1] => SimpleXMLElement Object
                (
                    [orig] => Hello! How are you?
                    [trans] => 嘿,你好?
                )
            [2] => SimpleXMLElement Object
                (
                    [orig] => Hello, Brooks!How are you?
                    [trans] => 喂,布鲁克斯!你好吗?
                )
            [3] => SimpleXMLElement Object
                (
                    [orig] => Hi, Barbara, how are you?
                    [trans] => 嘿,芭芭拉,你好吗?
                )
            [4] => SimpleXMLElement Object
                (
                    [orig] => How are you? -Quite well, thank you.
                    [trans] => 你好吗?-很好,谢谢你。
                )
        )
)

我们在PHP语言中可以用以下方法取得我们想要的值:

<?php
$data = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<dict num="219" id="219" name="219">
 <key>你好</key>
 <pos></pos>
 <acceptation>Array;Array;Array;</acceptation>
 <sent>
  <orig>Haven't seen you for a long time. How are you?</orig>
  <trans>多日不见了,你好吗?</trans>
 </sent>
 <sent>
  <orig>Hello! How are you?</orig>
  <trans>嘿,你好?</trans>
 </sent>
 <sent>
  <orig>Hello, Brooks!How are you?</orig>
  <trans>喂,布鲁克斯!你好吗?</trans>
 </sent>
 <sent>
  <orig>Hi, Barbara, how are you?</orig>
  <trans>嘿,芭芭拉,你好吗?</trans>
 </sent>
 <sent>
  <orig>How are you? -Quite well, thank you.</orig>
  <trans>你好吗?-很好,谢谢你。</trans>
 </sent>
</dict>
XML;
$xmldata = simplexml_load_string($data);
header("Content-Type: text/html; charset=UTF-8");
print_r($xmldata);
echo "<br />".trim($xmldata->sent[0]->orig); //Haven't seen you for a long time. How are you?
echo "<br />".trim($xmldata->key); //你好
?>
PHP 相关文章推荐
PHP中return 和 exit 、break和contiue 区别与用法
Apr 09 PHP
解析php中curl_multi的应用
Jul 17 PHP
利用php下载xls文件(自己动手写的)
Apr 18 PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 PHP
ThinkPHP CURD方法之table方法详解
Jun 18 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
Sep 24 PHP
php常用字符串比较函数实例汇总
Nov 24 PHP
PHP输入输出流学习笔记
May 12 PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 PHP
thinkphp配置文件路径的实现方法
Aug 30 PHP
PHP反射机制原理与用法详解
Feb 15 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
Jun 11 PHP
使用php显示搜索引擎来的关键词
Feb 13 #PHP
php根据日期判断星座的函数分享
Feb 13 #PHP
php的hash算法介绍
Feb 13 #PHP
php去除字符串换行符示例分享
Feb 13 #PHP
php中url函数介绍及使用示例
Feb 13 #PHP
php中的filesystem文件系统函数介绍及使用示例
Feb 13 #PHP
php实现cc攻击防御和防止快速刷新页面示例
Feb 13 #PHP
You might like
用PHP调用Oracle存储过程
2006/10/09 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
PHP中实现获取IP和地理位置类分享
2015/02/10 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
PHP静态成员变量和非静态成员变量详解
2017/02/14 PHP
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
2014/09/02 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
js倒计时抢购实例
2015/12/20 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
微信小程序商城项目之购物数量加减(3)
2017/04/17 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
Python制作简单的网页爬虫
2015/11/22 Python
Python中的字符串查找操作方法总结
2016/06/27 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
对Django中内置的User模型实例详解
2019/08/16 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
2020/10/12 Python
英国天然保健品网站:Simply Supplements
2017/03/22 全球购物
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
广州某公司软件工程师面试题
2014/12/22 面试题
通信专业个人自我鉴定
2013/10/21 职场文书
调查研究项目计划书
2014/04/29 职场文书
2014年设计师工作总结
2014/11/25 职场文书
期末复习计划
2015/01/19 职场文书
总经理助理岗位职责
2015/01/31 职场文书