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与XML的PDF文档生成技术
Oct 09 PHP
PHP程序员编程注意事项
Apr 10 PHP
php接口和抽象类使用示例详解
Mar 02 PHP
查找php配置文件php.ini所在路径的二种方法
May 26 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
Aug 25 PHP
php显示时间常用方法小结
Jun 05 PHP
PHP中iconv函数知识汇总
Jul 02 PHP
PHP检测用户是否关闭浏览器的方法
Feb 14 PHP
PHP PDOStatement::bindColumn讲解
Jan 30 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
May 29 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 PHP
TP5框架页面跳转样式操作示例
Apr 05 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读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
PHP中STDCLASS用法实例分析
2016/11/11 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
JavaScript两个变量交换值的实现方法
2017/03/01 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
谈谈对vue响应式数据更新的误解
2017/08/01 Javascript
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
vue-router beforeEach跳转路由验证用户登录状态
2018/12/26 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
后勤人员自我评价怎么写
2013/09/19 职场文书
环境建设实施方案
2014/03/14 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
优秀党员先进材料
2014/12/18 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
入党积极分子考察意见
2015/06/02 职场文书
公司保洁员管理制度
2015/08/04 职场文书
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python
python pygame 开发五子棋双人对弈
2022/05/02 Python
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS