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 相关文章推荐
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
PHP 引用文件技巧
Mar 02 PHP
PHP利用str_replace防注入的方法
Nov 10 PHP
php无限遍历目录示例
Feb 21 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
Apr 10 PHP
phpmailer中文乱码问题的解决方法
Apr 22 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
Smarty日期时间操作方法示例
Nov 15 PHP
php接口技术实例详解
Dec 07 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
Jan 17 PHP
PHP连接MySQL数据库操作代码实例解析
Jul 11 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 09 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
咖啡与牛奶
2021/03/03 冲泡冲煮
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
javascript innerText和innerHtml应用
2010/01/28 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
javascript中call apply 与 bind方法详解
2016/03/10 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
js重写方法的简单实现
2016/07/10 Javascript
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
JS实现吸顶特效
2020/01/08 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
Python使用pymysql小技巧
2017/06/04 Python
PyTorch预训练的实现
2019/09/18 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
python爬取招聘要求等信息实例
2020/11/20 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
html5录音功能实战示例
2019/03/25 HTML / CSS
《小池塘》教学反思
2014/02/28 职场文书
银行委托书范本
2014/04/04 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
说谎欺骗人检讨书300字
2014/11/18 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
工作简报格式范文
2015/07/21 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
Django框架中表单的用法
2022/06/10 Python