使用SimpleXML解析xml文件数据
最近工作要求从一个XML文档中批量读取APK应用数据,自然想到用SimpleXML。经过一段时间摸索,终于成功解析,现在将思路以及代码做下记录:
xml文件格式大致如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html> <html xmlns="http//www.w3.org/1999/xhtml" xml:lang="en"> <body> <appinfos> <appinfo> <name>app1</name>
<icon>http://www.baidu.com/pic/dxdfdf.png</icon> <downurl>http://www.baidu.com/down/sdkdfk.apk</downurl> <screenshot1>http://www.baidu.com/pic/sdfuererieir.png</screenshot1> </appinfo> <name>app2</name> <icon>http://www.baidu.com/pic/dxdfdf.png</icon> <downurl>http://www.baidu.com/down/sdkdfk.apk</downurl> <screenshot1>http://www.baidu.com/pic/sdfuererieir.png</screenshot1> </appinfo> <name>app3</name> <icon>http://www.baidu.com/pic/dxdfdf.png</icon> <downurl>http://www.baidu.com/down/sdkdfk.apk</downurl> <screenshot1>http://www.baidu.com/pic/sdfuererieir.png</screenshot1> </appinfo> </appinfos> </body> </html>
我得需求是要从这个文件中得到所有的apk信息(apk1,apk2,apk3....)。php代码是这样的:
<?php
header("content-type:text/html;charset=utf-8");
error_reporting(E_ALL);
$xmlObj = simplexml_load_file("new.xml");
foreach($xmlObj->body->appInfos->appInfo as $key => $val){
foreach($val as $ck => $cv){
$arr[$ck] = (string)$cv; //这个地方的string做了强制转换,否则系统会仍为$cv是一个simpleXML对象,这样是得不到字符串结果的
}
var_dump($arr);
$str = json_encode($arr);
file_put_contents("data.txt",$str."\r",FILE_APPEND);
$arr = array();
}
观察这行代码:$xmlObj->body->appInfos->appInfo可以发现,SimpleXML的操作类似于一个嵌套对象,一级一级往下找,找到appInfo发现是多个,后面的代码遍历一下就得到结果了。
注意xml的标准比较严格,实体&,<,>,',"需要分别转义成&,$lt;,$gt;,$apos;,$quot;
最末级的数据比如:<icon>http://www.baidu.com/pic/006.png</icon>,在</icon>前如果有换行读取时也是会报错的。还有,<br />一定要这样写才行。
使用SimpleXML解析xml文件数据的更多相关文章
- SimpleXML解析xml文件
SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式. 与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从 XML 元素中读取文本数据. Simp ...
- PHP使用SimpleElement创建和解析xml文件
<!-- 使用SimpleXMLElement生成xml文件 --><?php//生成一个xml文件 //xml字符串$_xml = <<<_xml<?xml ...
- android解析xml文件的方式
android解析xml文件的方式 作者:东子哥 ,发布于2012-11-26,来源:博客园 在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xm ...
- Ajax实现xml文件数据插入数据库(一)--- 构建解析xml文件的js库
Ajax实现将xml文件数据插入数据库的过程所涉及到的内容比较多,所以对于该过程的讲解本人打算根据交互的过程将其分为三个部分,第一部分为构建解析xml文件的javascript库,第二部分为ajax与 ...
- android开发 解析服务器端xml文件数据存储到android客户端SQLite数据库
以下面xml文件为例对其解析(假设此xml就在服务器端Server项目下的servlet包下的MenuServlet文件的输出流中): <?xml version="1.0" ...
- 在java项目中怎样利用Dom4j解析XML文件获取数据
在曾经的学习.net时常常会遇到利用配置文件来解决项目中一些须要常常变换的数据.比方数据库的连接字符串儿等.这个时候在读取配置文件的时候.我们一般会用到一个雷configuration,通过这个类来进 ...
- 编写Java程序,使用 dom4j 解析上一节王者荣耀“英雄”对应的Xml文件数据内容,打印输出,具体格式
查看本章节 查看作业目录 需求说明: 使用 dom4j 解析上一节王者荣耀"英雄"对应的Xml文件数据内容,打印输出,具体格式如图所示 实现思路: 创建ParseHeroXML用于 ...
- JAVA中使用DOM解析XML文件
XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...
- Android开发学习---使用XmlPullParser解析xml文件
Android中解析XML的方式主要有三种:sax,dom和pull关于其内容可参考:http://blog.csdn.net/liuhe688/article/details/6415593 本文将 ...
随机推荐
- SimpleRpc-网络事件响应Reactor设计模式
前言 这篇文章主要介绍整个框架用到的最核的一个设计模式:反应器模式.这个设计模式可以在<面向对象的软件架构>中详细了解,没有这本书的小伙伴不要急,我通过咱们的SimpleRpc来告诉大家这 ...
- Coder的好伙伴Github
网络越来越发达,各式各样的网盘.云存储也走进日常生活, 在老师的指导下,我第一次接触了GitHub. 什么是Github? Github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一 ...
- Apache Spark 2.2.0 中文文档 - SparkR (R on Spark) | ApacheCN
SparkR (R on Spark) 概述 SparkDataFrame 启动: SparkSession 从 RStudio 来启动 创建 SparkDataFrames 从本地的 data fr ...
- Linux 环境下java安装及配置
操作系统环境: Red Hat Enterpriser Linux 6.5 jdk版本: jdk1.8.0_144 1 从官网下载Linux操作系统对应的jdk版本文件 2 安装jdk 3 安装完 ...
- React——组件的生命周期函数
每一个组件都有一些生命周期函数. 当组件实例被创建并且会插入到DOM中,下面这些函数会被调用 constructor componentWillMount render componentDidMou ...
- android studio集成ijkplayer
介绍 ijkplayer是一款非常火的开源视频播放器,android和IOS通用.关于怎么编译怎么导入android Studio中自己的项目,其中坑很多,本篇记录下自己的操作记录.ijkplayer ...
- HCatalog
HCatalog HCatalog是Hadoop中的表和存储管理层,能够支持用户用不同的工具(Pig.MapReduce)更容易地表格化读写数据. HCatalog从Apache孵化器毕业,并于201 ...
- vue-chat项目之重构与体验优化
前言 vue-chat 也就是我的几个月之前写的一个基于vue的实时聊天项目,到目前为止已经快满400star了,注册量也已经超过了1700+,消息量达2000+,由于一直在实习,没有时间对它频繁地更 ...
- 使用svn控制系统的优缺点和注意事项
1.当无法连接到中央版本库的环境下,你无法提交代码,将代码加入版本控制.公司一般是局域网,所以使用环境问题不大. 2.svn的备份要备份所有代码数据以及所有更改的版本记录. 3.svn服务端运行方式: ...
- Sqlserver中存储过程和游标的一些使用例子
/*带输入输出参数存储过程*/ ALTER PROCEDURE pro_test2 @userID INT, @maxUserID INT OUTPUT, @countUser INT OUTPUT ...