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中的观察者模式
Mar 24 PHP
学习使用curl采集curl使用方法
Jan 11 PHP
解析php时间戳与日期的转换
Jun 06 PHP
ThinkPHP中的关联模型注意点
Jun 16 PHP
ThinkPHP应用模式扩展详解
Jul 16 PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
php判断文件夹是否存在不存在则创建
Apr 09 PHP
php等比例缩放图片及剪切图片代码分享
Feb 13 PHP
Redis构建分布式锁
Mar 28 PHP
Laravel 自带的Auth验证登录方法
Sep 30 PHP
Thinkphp5.0 框架Model模型简单用法分析
Oct 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
TMDPHP 模板引擎使用教程
2012/03/13 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
2018/05/05 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
详解用python生成随机数的几种方法
2019/08/04 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
Jupyter 无法下载文件夹如何实现曲线救国
2020/04/22 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
医校毕业生自我鉴定
2014/01/25 职场文书
社会发展项目建议书
2014/08/25 职场文书
规范化管理年活动总结
2014/08/29 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
劳模事迹材料范文
2014/12/24 职场文书
社区植树节活动总结
2015/02/06 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
杨善洲观后感
2015/06/04 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
详解Python中*args和**kwargs的使用
2022/04/07 Python