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字符串 ==比较运算符的副作用
Oct 21 PHP
php 数组的一个悲剧?
May 11 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
Jun 19 PHP
php找出指定范围内回文数且平方根也是回文数的方法
Mar 23 PHP
PHP实现文件上传和多文件上传
Dec 24 PHP
浅析PHP7新功能及语法变化总结
Jun 17 PHP
header与缓冲区之间的深层次分析
Jul 30 PHP
PHP生成图片验证码功能示例
Jan 12 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
360搜索引擎自动收录php改写方案
Apr 28 PHP
laravel http 自定义公共验证和响应的方法
Sep 29 PHP
laravel 5.3 单用户登录简单实现方法
Oct 14 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中的curl使用入门教程和常见用法实例
2014/04/10 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
Jquery Mobile 自定义按钮图标
2015/11/18 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
taro小程序添加骨架屏的实现代码
2019/11/15 Javascript
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
python sys.argv[]用法实例详解
2018/05/25 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
python实现UDP协议下的文件传输
2020/03/20 Python
html标签之Object和EMBED标签详解
2013/07/04 HTML / CSS
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
自我鉴定四大框架
2014/01/17 职场文书
春节晚会主持词
2014/03/24 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
教师个人事迹材料
2014/12/17 职场文书
项目投资意向书范本
2015/05/09 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
Python游戏开发实例之graphics实现AI五子棋
2021/11/01 Python