PHP解析xml的方法
PHP解析xml的方法
<pre>
<?php
/** XML 文件分析类
* Date: 2013-02-01
* Author: fdipzone
* Ver: 1.0
*
* func:
* loadXmlFile($xmlfile) 读入xml文件输出Array
* loadXmlString($xmlstring) 读入xmlstring 输出Array
*/
class XMLParser{
/** 读取xml文件
* @param String $xmlfile
* @return Array
*/
public function loadXmlFile($xmlfile){
// get xmlfile content
$xmlstring = file_exists($xmlfile)? file_get_contents($xmlfile) : '';
// parser xml
list($flag, $data) = $this->parser($xmlstring);
return $this->response($flag, $data);
}
/** 读取xmlstring
* @param String $xmlstring
* @return Array
*/
public function loadXmlString($xmlstring){
// parser xml
list($flag, $data) = $this->parser($xmlstring);
return $this->response($flag, $data);
}
/** 解释xml内容
* @param String $xmlstring
* @return Array
*/
private function parser($xmlstring){
$flag = false;
$data = array();
// check xml format
if($this->checkXmlFormat($xmlstring)){
$flag = true;
// xml to object
$data = simpleXML_load_string($xmlstring, 'SimpleXMLElement', LIBXML_NOCDATA);
// object to array
$this->objectToArray($data);
}
return array($flag, $data);
}
/** 检查xml格式是否正确
* @param String $xmlstring
* @return boolean
*/
private function checkXmlFormat($xmlstring){
if($xmlstring==''){
return false;
}
$xml_parser_obj = xml_parser_create();
if(xml_parse_into_struct($xml_parser_obj, $xmlstring, $vals, $indexs)===1){ // 1:success 0:fail
return true;
}else{
return false;
}
}
/** object 转 Array
* @param object $object
* @return Array
*/
private function objectToArray(&$object){
$object = (array)$object;
foreach($object as $key => $value){
if($value==''){
$object[$key] = "";
}else{
if(is_object($value) || is_array($value)){
$this->objectToArray($value);
$object[$key] = $value;
}
}
}
}
/** 输出返回
* @param boolean $flag true:false
* @param Array $data 转换后的数据
* @return Array
*/
private function response($flag=false, $data=array()){
return array($flag, $data);
}
}
?>
<?php
require "XMLParser.class.php";
$xmlfile = 'file.xml';
$xmlstring = '<?xml version="1.0" encoding="utf-8"?>
<xmlroot>
<status>1000</status>
<info></info>
<result><id>100</id>
<name>fdipzone</name>
<gender>1</gender>
<age>28</age>
</result>
</xmlroot>';
echo '<pre>';
$xml_parser = new XMLParser();
echo "response xmlfile\r\n";
list($flag, $xmldata) = $xml_parser->loadXmlFile($xmlfile);
if($flag){
print_r($xmldata);
}
echo "response xmlstring\r\n";
list($flag, $xmldata) = $xml_parser->loadXmlString($xmlstring);
if($flag){
print_r($xmldata);
}
echo '</pre>';
?>
</pre>
PHP解析xml的方法的更多相关文章
- 解析XML的方法
解析XML的方法 1.DOM生成和解析XML 2.SAX生成和解析XML 3.DOM4J生成和解析XML 4.JDOM生成和解析XML
- iOS 详解NSXMLParser方法解析XML数据方法
前一篇文章已经介绍了如何通过URL从网络上获取xml数据.下面介绍如何将获取到的数据进行解析. 下面先看看xml的数据格式吧! <?xml version="1.0" enc ...
- java解析xml字符串方法
一,用DOM4J 针对无重复标签的xml字符串格式,如下: 针对此种情况可用DOM4J解析法,引入 dom4j的相关jar包代码如下: Document document=DocumentHelpe ...
- android解析xml文件方法之一-----DOM
Hello.xml文件 <dict num="219" id="219" name="219"> <key>hell ...
- windows phone中三种解析XML的方法
需求如下, 项目需要将一段xml字符串中的信息提取出来 <?xml version=""1.0"" encoding=""UTF-8& ...
- SimpleXML php 解析xml 的方法
SimpleXML是PHP5后提供的一套简单易用的xml工具集,可以把xml转换成方便处理的对象,也可以组织生成xml数据.不过它不适用于包含namespace的xml,而且要保证xml格式完整(we ...
- android 中解析XML的方法(转)
在XML解析和使用原始XML资源中都涉及过对XML的解析,之前使用的是 DOM4J和 XmlResourceParser 来解析的.本文中将使用XmlPullParser来解析,分别解析不同复杂度的t ...
- Android中解析XML的方法
假设我要解析如下的XML文件: <?xml version="1.0" encoding="UTF-8"?> <books> <b ...
- 最简单的JAVA解析XML字符串方法
引入 dom4j 包<dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifa ...
随机推荐
- Mongodb 查询优化(慢查询Profiling)
开启慢查询Profiling Profiling级别说明 0:关闭,不收集任何数据. 1:收集慢查询数据,默认是100毫秒. 2:收集所有数据 1.通过修改配置文件开启Profiling 修改启动mo ...
- 将Eclipse,MyEclipse等编辑器的项目管理框颜色改为护眼豆沙绿的方法
转载链接:https://blog.csdn.net/caibaoH/article/details/77005977
- Java上传大文件夹
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...
- P4556 雨天的尾巴 线段树合并
使用线段树合并,每个节点维护一棵权值线段树,下标为救济粮种类,区间维护数量最多的救济粮编号(下标).所以每个节点答案即为\(tre[rot[x]]\). 然后运用树上点的差分思想,对于分发路径\(u, ...
- 爬虫(十):scrapy命令行详解
建爬虫项目 scrapy startproject 项目名例子如下: localhost:spider zhaofan$ scrapy startproject test1 New Scrapy pr ...
- CentOS7安装Airflow
实验环境: centos7python3.6 安装配置: 1.看看是否有gcc,没有的话需要进行安装: yum install gcc (后续安装airflow如果不成功,可以再次执行,它会更新包) ...
- 10月清北学堂培训 Day 4
今天是钟皓曦老师的讲授~ 今天的题比昨天的难好多,呜~ T1 我们需要找到一个能量传递最多的异构体就好了: 整体答案由花时间最多的异构体决定: 现在的问题就是这么确定一个异构体在花费时间最优的情况下所 ...
- C#中指针的简单使用
原来C#不仅仅支持和C/C++中指针(或者说是引用)很像的委托delegate,还支持在unsafe代码块中使用指针,从而写非托管的代码(人为不让垃圾回收机制来管理相应的内存).在unsafe中就可以 ...
- [Go] 基础系列二:channel的关闭和广播
利用channe关闭任务 package ch21 import ( "fmt" "testing" "time" ) //判断是否有取消任 ...
- swoole入门到实战打造高性能赛事直播平台☆
第1章 课程介绍 本章主要是介绍了swoole的一些特性,以及使用场景,并且分享了swoole在其他公司的一些案例,最后重点讲解了swoole学习的一些准备工作. 第2章 PHP 7 源码安装 本 ...