php的XML文件解释类应用实例

yipeiwu_com6年前PHP代码库

本文实例讲述了php的XML文件解释类及其用法,是非常实用的技巧。分享给大家供大家参考。具体如下:

XMLParser.class.php类文件如下:

<?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); 
  } 
} 
?>

Demo示例程序如下:

<?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>'; 
?> 

关于PHP的XML预定义常量可参考官方文档:
http://www.php.net/manual/en/libxml.constants.php

希望本文所述对大家PHP程序设计的学习有所帮助。

相关文章

php使用cookie保存用户登录的用户名实例

本文实例讲述了php使用cookie保存用户登录的用户名的方法。分享给大家供大家参考。具体实现方法如下: 用户登录文件:login.php 复制代码 代码如下:<html>...

php文件上传的两种实现方法

文件上传一般有下面2种方式: 有两种: 1、标准input表单方式,典型的用$_FILES进行接收; 2、以Base64的方式进行传送,一般是AJAX异步上传。 第一种 标准的input...

php删除指定目录的方法

本文实例讲述了php删除指定目录的方法。分享给大家供大家参考。具体分析如下: 这段代码可实现递归删除子目录的功能 <?php /** * Delete a file,...

php daddslashes()和 saddslashes()有哪些区别分析

//GPC过滤,自动转义$_GET,$_POST,$_COOKIE中的特殊字符,防止SQL注入攻击 $_GET = saddslashes($_GET); $_POST = saddsl...

PHP与以太坊交互详解

自去年以来,我们正在开发区块链(Blockchain)业务。最近使用过Ethereum并使用PHP,所以我想我们应该聊聊这个话题。 这里有个前提: 1.理解区块链 2.对编程语言有了解...