• 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 ";
    list($flag, $xmldata) = $xml_parser->loadXmlFile($xmlfile);
    if($flag){
    print_r($xmldata);
    }

    echo "response xmlstring ";
    list($flag, $xmldata) = $xml_parser->loadXmlString($xmlstring);
    if($flag){
    print_r($xmldata);
    }

    echo '</pre>';
    ?>
    </pre>

  • 相关阅读:
    题解 P5320
    Codeforces 1500F
    三个 AGC D(AGC037D、AGC043D、AGC050D)
    Atcoder Regular Contst 084 D
    DG-基础知识点整理
    MySQL-数据恢复场景实验
    MySQL-查看Galera集群状态
    MySQL-运行日志切割
    MySQL-生产环境删除大表或大量binlog策略
    MySQL-基于(MySQL 5.7)NDB中启用共享权限表
  • 原文地址:https://www.cnblogs.com/newmiracle/p/11864768.html
Copyright © 2020-2023  润新知