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 PDO中文乱码解决办法
Jul 20 PHP
PHP 存储文本换行实现方法
Jan 05 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
Jun 18 PHP
php常用Output和ptions/Info函数集介绍
Jun 19 PHP
PHP远程采集图片详细教程
Jul 01 PHP
php使用GD创建保持宽高比缩略图的方法
Apr 17 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
PHP实现按之字形顺序打印二叉树的方法
Jan 16 PHP
Yii2.0建立公共方法简单示例
Jan 29 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 PHP
如何用PHP实现多线程编程
May 26 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
一个好用的分页函数
2006/11/16 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
解析PHP实现多进程并行执行脚本
2013/06/18 PHP
解析php中array_merge与array+array的区别
2013/06/21 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
JavaScript中的事件处理
2008/01/16 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
Python获取央视节目单的实现代码
2015/07/25 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
Python编译成.so文件进行加密后调用的实现
2019/12/23 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
《画家乡》教学反思
2014/04/22 职场文书
财务情况说明书范文
2014/05/06 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
教师工作总结范文2014
2014/11/10 职场文书
期末复习计划
2015/01/19 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
超级礼物观后感
2015/06/15 职场文书
学校团代会开幕词
2016/03/04 职场文书
Vue3 Composition API的使用简介
2021/03/29 Vue.js