<?php
/*******************************************************************
 * 版权协议：2009-2019
 * 版权所有: PHP-北京金南曦网络技术有限公司旗下PHPWMS，PHP商城系统技术支持中心http://www.php188.net，并保留所有权利。 
* PHP商城系统网址: http://www.php188.com
 * PHPWMS系统网址：http://www.phpwms.com
 * 销售电话：010-87875088
 * 销售电话：010-87875188 
*------------------------------------------------------------------
 * 这不是一个完全免费软件！您只能在不用于商业目的的前提下对程序代码进
 * 行修改和使用；不允许对程序代码以任何形式任何目的的再发布。
 *------------------------------------------------------------------
 * 文件名称：cls.xml_parser.php
 * 摘    要：XML 解析类 for PHP5
 * 适用范围：PHPWMS 1.0
 * 版    本：1.0
 *------------------------------------------------------------------
 * Script Written By phpwms项目组
 * 最后更新： 2009-09-24 phpwms 由PHP金南曦网络技术有限公司整理发布
 *******************************************************************/

	!defined('IN_SYS') and die('Hacking attempt');

	class XmlParser {

		public $xml;

		// 构造函数
		public function __construct($xml = '') {
			$this -> getXml($xml);
		}

		// 将XML数据转换成数组
		public function xmlToArray($xml = '') {
			$this -> getXml($xml);
			$result  =  simplexml_load_string($this -> xml);

			if($result !== false) {
				return $this -> objToArray($result);
			} else
				return false;
		}

		// 获取XML数据
		public function getXml($xml='') {
			if (!empty($xml)) {
				if (is_file($xml)) {
					$this -> xml = file_get_contents($xml);
				} elseif(is_string($xml)) {
					$this -> xml = $xml;
				}
			}
		}

		// SimpleXMLElement 对象转数组
		private function objToArray($object) {
			$return = NULL;

			if(is_array($object)) {
				foreach($object as $key => $value)
					$return[$key] = $this -> objToArray($value);
			} else {
				$var = get_object_vars($object);

				if ($var) {
					foreach($var as $key => $value)
						$return[$key] = ($key && !$value) ? NULL : $this -> objToArray($value);
				} else 
					return $object;
			}
			return $return;
		}

		// 将数组转换成xml编码
		function arrayToXml($arr,$encoding = 'utf-8',$root = "phpwms") {
			$xml = '<?xml version="1.0" encoding="'.$encoding.'"?>';
			$xml .= '<'.$root.'>';
			$xml .= setXml($arr);   
			$xml .= '</'.$root.'>'; 
			return $xml;
		}

		function setXml($arr) {
			if(is_object($arr)) {
				$data = get_object_vars($arr);
			}
			$xml = '';
			foreach($arr as $key=>$val) {
				is_numeric($key) && $key = "item id=\"$key\"";
				$xml .= "<$key>";
				$xml .= (is_array($val)||is_object($val))?data_to_xml($val):$val;
				list($key,) = explode(' ',$key);
				$xml .= "</$key>";
			}
			return $xml;
		}
	}
?>