PHP China | 中国开源之路 's Archiver

keminar 发表于 2007-9-4 13:08

PHP解析XML类(返回数组)

[php]<?php
/**
* 解析XML类
*
*/
class xmlParser
{
var $params = array();
/**
  * 读取XML文件
  *
  * @param unknown_type $file
  */
function xmlOpen($file){
  $fp = @fopen($file, "r");
  if (!$fp) die("不能打开数据源");
  //读取文件
  $this->data = fread($fp, filesize($file));
  fclose($fp);
  $this->xmlToArray();
}
/**
  * 把变量中数据导成数组
  *
  * @return unknown
  */
function xmlToArray()
{
  $level = array();
  $xml_parser = xml_parser_create();
  // 将xml文件读入数组
  xml_parse_into_struct($xml_parser, $this->data, $vals, $index);
  xml_parser_free($xml_parser);
  foreach ($vals as $xml_elem)
  {
   // 元素结点展开
   if ($xml_elem['type'] == 'open')
   {
    if (array_key_exists('attributes',$xml_elem))
    {
     list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
    }
    else
    {
     $level[$xml_elem['level']] = $xml_elem['tag'];
    }
   }
   if ($xml_elem['type'] == 'complete')
   {
    $start_level = 1;
    $php_stmt = '$this->params';
    while($start_level < $xml_elem['level'])
    {
     $php_stmt .= '[$level['.$start_level.']]';
     $start_level++;
    }
    $php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';
    eval($php_stmt);
   }
  }
  Return $this->params;
}
//-----------------------------------------------------------------------------
}
?>[/php]

slawdan 发表于 2008-11-15 11:26

…………比SimpleXML有什么优势?

idgnarn 发表于 2008-11-19 10:40

eval不安全吧。。。要过滤下

youscript 发表于 2008-11-19 21:32

收藏下

ginux 发表于 2008-11-20 01:47

收藏

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.