• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP解析xml格式数据工具类示例

    本文实例讲述了PHP解析xml格式数据工具类。分享给大家供大家参考,具体如下:

    class ome_xml {
      /**
      * xml资源
      *
      * @var    resource
      * @see    xml_parser_create()
      */
      public $parser;
      /**
      * 资源编码
      *
      * @var    string
      */
      public $srcenc;
      /**
      * target encoding
      *
      * @var    string
      */
      public $dstenc;
      /**
      * the original struct
      *
      * @access  private
      * @var    array
      */
      public $_struct = array();
      /**
      * Constructor
      *
      * @access    public
      * @param    mixed    [$srcenc] source encoding
      * @param    mixed    [$dstenc] target encoding
      * @return    void
      * @since
      */
      function SofeeXmlParser($srcenc = null, $dstenc = null) {
        $this->srcenc = $srcenc;
        $this->dstenc = $dstenc;
        // initialize the variable.
        $this->parser = null;
        $this->_struct = array();
      }
      /**
      * Parses the XML file
      *
      * @access    public
      * @param    string    [$file] the XML file name
      * @return    void
      * @since
      */
      function xml2array($file) {
        //$this->SofeeXmlParser('utf-8');
      $data = file_get_contents($file);
        $this->parseString($data);
        return $this->getTree();
      }
      function xml3array($file){
      $data = file_get_contents($file);
      $this->parseString($data);
      return $this->_struct;
      }
      /**
      * Parses a string.
      *
      * @access    public
      * @param    string    data XML data
      * @return    void
      */
      function parseString($data) {
        if ($this->srcenc === null) {
          $this->parser = xml_parser_create();
        } else {
          if($this->parser = xml_parser_create($this->srcenc)) {
            return 'Unable to create XML parser resource with '. $this->srcenc .' encoding.';
          }
        }
        if ($this->dstenc !== null) {
          @xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, $this->dstenc) or die('Invalid target encoding');
        }
        xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);  // lowercase tags
        xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, 1);    // skip empty tags
        if (!xml_parse_into_struct($this->parser, $data, $this->_struct)) {
          /*printf("XML error: %s at line %d",
              xml_error_string(xml_get_error_code($this->parser)),
              xml_get_current_line_number($this->parser)
          );*/
          $this->free();
          return false;
        }
        $this->_count = count($this->_struct);
        $this->free();
      }
      /**
      * return the data struction
      *
      * @access    public
      * @return    array
      */
      function getTree() {
        $i = 0;
        $tree = array();
        $tree = $this->addNode(
          $tree,
          $this->_struct[$i]['tag'],
          (isset($this->_struct[$i]['value'])) ? $this->_struct[$i]['value'] : '',
          (isset($this->_struct[$i]['attributes'])) ? $this->_struct[$i]['attributes'] : '',
          $this->getChild($i)
        );
        unset($this->_struct);
        return $tree;
      }
      /**
      * recursion the children node data
      *
      * @access    public
      * @param    integer    [$i] the last struct index
      * @return    array
      */
      function getChild($i) {
        // contain node data
        $children = array();
        // loop
        while (++$i  $this->_count) {
          // node tag name
          $tagname = $this->_struct[$i]['tag'];
          $value = isset($this->_struct[$i]['value']) ? $this->_struct[$i]['value'] : '';
          $attributes = isset($this->_struct[$i]['attributes']) ? $this->_struct[$i]['attributes'] : '';
          switch ($this->_struct[$i]['type']) {
            case 'open':
              // node has more children
              $child = $this->getChild($i);
              // append the children data to the current node
              $children = $this->addNode($children, $tagname, $value, $attributes, $child);
              break;
            case 'complete':
              // at end of current branch
              $children = $this->addNode($children, $tagname, $value, $attributes);
              break;
            case 'cdata':
              // node has CDATA after one of it's children
              $children['value'] .= $value;
              break;
            case 'close':
              // end of node, return collected data
              return $children;
              break;
          }
        }
        //return $children;
      }
      /**
      * Appends some values to an array
      *
      * @access    public
      * @param    array    [$target]
      * @param    string    [$key]
      * @param    string    [$value]
      * @param    array    [$attributes]
      * @param    array    [$inner] the children
      * @return    void
      * @since
      */
      function addNode($target, $key, $value = '', $attributes = '', $child = '') {
        if (!isset($target[$key]['value'])  !isset($target[$key][0])) {
          if ($child != '') {
            $target[$key] = $child;
          }
          if ($attributes != '') {
            foreach ($attributes as $k => $v) {
              $target[$key][$k] = $v;
            }
          }
          $target[$key]['value'] = $value;
        } else {
          if (!isset($target[$key][0])) {
            // is string or other
            $oldvalue = $target[$key];
            $target[$key] = array();
            $target[$key][0] = $oldvalue;
            $index = 1;
          } else {
            // is array
            $index = count($target[$key]);
          }
          if ($child != '') {
            $target[$key][$index] = $child;
          }
          if ($attributes != '') {
            foreach ($attributes as $k => $v) {
              $target[$key][$index][$k] = $v;
            }
          }
          $target[$key][$index]['value'] = $value;
        }
        return $target;
      }
      /**
      * Free the resources
      *
      * @access    public
      * @return    void
      **/
      function free() {
        if (isset($this->parser)  is_resource($this->parser)) {
          xml_parser_free($this->parser);
          unset($this->parser);
        }
      }
    }
    
    

    PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:

    在线XML/JSON互相转换工具:
    http://tools.jb51.net/code/xmljson

    在线格式化XML/在线压缩XML
    http://tools.jb51.net/code/xmlformat

    XML在线压缩/格式化工具:
    http://tools.jb51.net/code/xml_format_compress

    XML代码在线格式化美化工具:
    http://tools.jb51.net/code/xmlcodeformat

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP针对XML文件操作技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP错误与异常处理方法总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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

    您可能感兴趣的文章:
    • php获取通过http协议post提交过来xml数据及解析xml
    • php解析xml方法实例详解
    • php解析xml 的四种简单方法(附实例)
    • PHP用SAX解析XML的实现代码与问题分析
    • php遍历解析xml字符串的方法
    • php 解析xml 的四种方法详细介绍
    • PHP基于SimpleXML生成和解析xml的方法示例
    • PHP使用xpath解析XML的方法详解
    • PHP处理数组和XML之间的互相转换
    • php实现将数组转换为XML的方法
    • PHP简单实现解析xml为数组的方法
    上一篇:php实现的微信分享到朋友圈并记录分享次数功能
    下一篇:PHP中类静态调用和范围解析操作符的区别解析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP解析xml格式数据工具类示例 PHP,解析,xml,格式,数据,工具,