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 全文搜索和替换的实现代码
Jul 29 PHP
php foreach、while性能比较
Oct 15 PHP
PHP资源管理框架Assetic简介
Jun 12 PHP
php支付宝接口用法分析
Jan 04 PHP
php实现表单多按钮提交action的处理方法
Oct 24 PHP
php自定义函数实现二维数组按指定key排序的方法
Sep 29 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
Oct 08 PHP
PHP数组操作简单案例分析
Oct 15 PHP
使用PHP免费发送定时短信的实例
Oct 24 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 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
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
PHP实现采集程序原理和简单示例代码
2007/03/18 PHP
分享一个超好用的php header下载函数
2014/01/31 PHP
javascript some()函数用法详解
2014/11/13 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
php中删除、清空session的方式总结
2015/10/09 PHP
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
python列表操作实例
2015/01/14 Python
Python实现识别手写数字大纲
2018/01/29 Python
Python实现的json文件读取及中文乱码显示问题解决方法
2018/08/06 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
区分python中的进程与线程
2020/08/13 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
HTML5 Canvas概述
2009/08/26 HTML / CSS
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
马来西亚网上购物:Youbeli
2018/03/30 全球购物
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
.NET面试问题集
2015/12/08 面试题
社区工作者先进事迹
2014/01/18 职场文书
狼和鹿教学反思
2014/02/05 职场文书
绿色环保演讲稿
2014/05/10 职场文书
大学生工作求职信
2014/06/23 职场文书
团代会开幕词
2015/01/28 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
ORACLE查看当前账号的相关信息
2021/06/18 Oracle
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android