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 相关文章推荐
使用数据库保存session的方法
Oct 09 PHP
php部分常见问题总结
Mar 27 PHP
PHP开发框架总结收藏
Apr 24 PHP
php Http_Template_IT类库进行模板替换
Mar 19 PHP
eaglephp使用微信api接口开发微信框架
Jan 09 PHP
一个简单的PHP验证码实现代码
May 10 PHP
PHP高级编程实例:编写守护进程
Sep 02 PHP
PHP中的output_buffering详细介绍
Sep 27 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
利用PHP绘图函数实现简单验证码功能的方法
Oct 18 PHP
微信小程序 消息推送php服务器验证实例详解
Mar 30 PHP
YII2框架中excel表格导出的方法详解
Jul 21 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
一个数据采集类
2007/02/14 PHP
php socket方式提交的post详解
2008/07/19 PHP
PHP Header用于页面跳转要注意的几个问题总结
2008/10/03 PHP
php 上传功能实例代码
2010/04/13 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
PDO::getAttribute讲解
2019/01/28 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
2014/09/26 NodeJs
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
2015/12/03 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
Python运算符重载用法实例分析
2015/06/01 Python
python实现剪切功能
2019/01/23 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
美国零售商店:Blue&Cream
2017/04/07 全球购物
C#软件工程师英语面试题
2015/06/07 面试题
教育课题研究自我鉴定范文
2013/12/28 职场文书
大学生自助营养快餐店创业计划书
2014/01/13 职场文书
班组安全员工作职责
2014/02/01 职场文书
生日宴会主持词
2014/03/20 职场文书
产品销售计划书
2014/05/04 职场文书
交通事故协议书范本
2014/11/18 职场文书
质量负责人岗位职责
2015/02/15 职场文书
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL