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 相关文章推荐
Smarty安装配置方法
Apr 10 PHP
PHP 分页类(模仿google)-面试题目解答
Sep 13 PHP
php二维数组合并及去重复的方法
Mar 04 PHP
php简单统计字符串单词数量的方法
Jun 19 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
PHP文件上传之多文件上传的实现思路
Jan 27 PHP
PHP+JQUERY操作JSON实例
Mar 23 PHP
php读取XML的常见方法实例总结
Apr 25 PHP
PHP实现找出链表中环的入口节点
Jan 16 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
Aug 06 PHP
PHP序列化和反序列化深度剖析实例讲解
Dec 29 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
Zend Guard一些常见问题解答
2008/09/11 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
js确认删除对话框效果的示例代码
2014/02/20 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
vue 实现锚点功能操作
2020/08/10 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
Python守护线程用法实例
2017/06/23 Python
Python多层装饰器用法实例分析
2018/02/09 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
Python爬取某平台短视频的方法
2021/02/08 Python
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
世界上最好的儿童品牌:AlexandAlexa
2018/01/27 全球购物
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
物理专业本科生自荐信
2014/01/30 职场文书
调查研究项目计划书
2014/04/29 职场文书
校庆标语集锦
2014/06/25 职场文书
学习十八大标语
2014/10/09 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
小学校长开学致辞
2015/07/29 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书