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 相关文章推荐
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
Apr 24 PHP
php后退一页表单内容保存实现方法
Jun 17 PHP
PHP数组传递是值传递而非引用传递概念纠正
Jan 31 PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 PHP
php静态文件生成类实例分析
Jan 03 PHP
PHP中的命名空间相关概念浅析
Jan 22 PHP
PHP中的socket_read和socket_recv区别详解
Feb 09 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
Jun 19 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
php封装单文件上传到数据库(路径)
Oct 15 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
PHP 布尔值的自增与自减的实现方法
May 03 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本地服务器分享
2013/02/19 PHP
dedecms函数分享之获取某一栏目所有子栏目
2014/05/19 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
PHP7新增函数
2021/03/09 PHP
JavaScript语法着色引擎(demo及打包文件下载)
2007/06/13 Javascript
Javascript 陷阱 window全局对象
2008/11/26 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
基于js文件加载优化(详解)
2018/01/03 Javascript
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
Javascript中弹窗confirm与prompt的区别
2018/10/26 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
详解如何模拟实现node中的Events模块(通俗易懂版)
2019/04/15 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
vue element-ui el-date-picker限制选择时间为当天之前的代码
2019/11/07 Javascript
实现一个Vue自定义指令懒加载的方法示例
2020/06/04 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
Python简单生成随机数的方法示例
2018/03/31 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
2020/03/05 Python
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
日期和时间问题
2015/01/04 面试题
销售总监岗位职责
2014/01/04 职场文书
建筑管理专业求职信
2014/07/28 职场文书
七年级英语教学反思
2016/02/15 职场文书
大学生创业计划书
2019/06/24 职场文书
详解MySQL的半同步
2021/04/22 MySQL
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python