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里面的抽象类
Jan 28 PHP
PHP IN_ARRAY 函数使用注意事项
Jul 24 PHP
php开发环境配置记录
Jan 14 PHP
php array的学习笔记
May 10 PHP
phpize的深入理解
Jun 03 PHP
php生成excel列序号代码实例
Dec 24 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
PHP内核探索之解释器的执行过程
Dec 22 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
Apr 04 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 PHP
PHP7数组的底层实现示例
Aug 25 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
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
33道php常见面试题及答案
2015/07/06 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
2019/05/20 PHP
yii2 在控制器中验证请求参数的使用方法
2019/06/19 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
JS实现输入框提示文字点击时消失效果
2016/07/19 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
2019/11/12 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
Python的Django框架中settings文件的部署建议
2015/05/30 Python
Python的多态性实例分析
2015/07/07 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
Python实现完整的事务操作示例
2017/06/20 Python
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
Django如何自定义分页
2018/09/25 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
python3.8下载及安装步骤详解
2020/01/15 Python
Python如何用filter函数筛选数据
2020/03/05 Python
请用用Java代码写一个堆栈
2012/01/26 面试题
设计顾问服务计划书
2014/05/04 职场文书
年终晚会活动方案
2014/08/21 职场文书
财务工作失误检讨书
2015/02/19 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书