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静态新闻列表自动生成代码
Jun 14 PHP
用PHP书写安全的脚本代码
Feb 05 PHP
Linux下CoreSeek及PHP扩展模块的安装
Sep 23 PHP
如何使用Strace调试工具
Jun 03 PHP
php读取csv实现csv文件下载功能
Dec 18 PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 PHP
PHP常用工具类大全附全部代码下载
Dec 07 PHP
[原创]smarty简单模板变量输出方法
Jul 09 PHP
thinkPHP5框架分页样式类完整示例
Sep 01 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 PHP
PHP实现与java 通信的插件使用教程
Aug 11 PHP
php实现映射操作实例详解
Oct 02 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判断数据库中的记录是否存在的方法
2014/11/14 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
Vue.use源码分析
2017/04/22 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
Vue核心概念Getter的使用方法
2019/01/18 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
在Django中创建第一个静态视图
2015/07/15 Python
Python解析树及树的遍历
2016/02/03 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
校园活动策划书范文
2014/01/10 职场文书
顶撞领导检讨书
2014/01/29 职场文书
商业房地产广告语
2014/03/13 职场文书
单位工程竣工验收方案
2014/03/16 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
2014法制宣传日活动总结
2014/07/09 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
家长通知书家长意见
2015/06/03 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书