php xml与数组相互转化
来源:互联网 发布:c语言ri什么意思 编辑:程序博客网 时间:2024/04/28 05:43
xmlConstruct.class.php
myXmlReader.class.php
<?phpclass xmlConstruct extends XMLWriter{ /** * Constructor. * @param string $prm_rootElementName A root element's name of a current xml document * @param string $prm_xsltFilePath Path of a XSLT file. * @access public * @param null */ public function __construct(){ } public function setOpenUri($uri) { $this->openUri($uri); $this->setIndent(true); $this->setIndentString(' '); $this->startDocument('1.0', 'UTF-8'); $this->startElement('root'); } /** * Set an element with a text to a current xml document. * @access public * @param string $prm_elementName An element's name * @param string $prm_ElementText An element's text * @return null */ public function setElement($prm_elementName, $prm_ElementText){ @$this->startElement($prm_elementName); $this->text($prm_ElementText); $this->endElement(); } /** * Construct elements and texts from an array. * The array should contain an attribute's name in index part * and a attribute's text in value part. * @access public * @param array $prm_array Contains attributes and texts * @return null */ public function fromArray($prm_array){ if(is_array($prm_array)){ foreach ($prm_array as $index => $element){ if(is_array($element)){ if(is_numeric($index)){$index = 'sub';} $this->startElement($index); $this->fromArray($element); $this->endElement(); } else{ $this->setElement($index, $element); } } } } /** * Return the content of a current xml document. * @access public * @param null * @return string Xml document */ public function getDocument(){ $this->endElement(); $this->endDocument(); return $this->outputMemory(); } /** * Output the content of a current xml document. * @access public * @param null */ public function output(){ //header('Content-type: text/xml'); echo $this->getDocument(); } }//$XmlConstruct = new XmlConstruct('root');//$XmlConstruct->fromArray($contents);//$XmlConstruct->output();?>
myXmlReader.class.php
<?php/** @access public * @version $Revision: 1.1 $ * @homepage http://www.sofee.cn * @copyright Copyright (c) 2004-2005 Sofee Development Team.(http://www.sofee.cn) * @since 2005-05-30 * @see PEAR:XML_Parser | SimpleXML extension */ class myXmlReader { /** * XML parser handle * * @var resource * @see xml_parser_create() */ var $parser; /** * source encoding * * @var string */ var $srcenc; /** * target encoding * * @var string */ var $dstenc; /** * the original struct * * @access private * @var array */ var $_struct = array(); /** * Constructor * * @access public * @param mixed [$srcenc] source encoding * @param mixed [$dstenc] target encoding * @return void * @since */ function myXmlReader($srcenc = null, $dstenc = null) { $this->srcenc = $srcenc; $this->dstenc = $dstenc; // initialize the variable. $this->parser = null; $this->_struct = array(); } /** * 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); } } /** * Parses the XML file * * @access public * @param string [$file] the XML file name * @return void * @since */ function parseFile($file) { $data = @file_get_contents($file) or die("Can't open file $file for reading!"); $this->parseString($data); } /** * Parses a string. * * @access public * @param string [$data] XML data * @return void */ function parseString($data) { if ($this->srcenc === null) { $this->parser = @xml_parser_create() or die('Unable to create XML parser resource.'); } else { $this->parser = @xml_parser_create($this->srcenc) or die('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(); exit(); } $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; } }
demo
<?phprequire 'myXmlReader.class.php'; require 'xmlConstruct.class.php'; $xml=new xmlConstruct(); $xml->setOpenUri(time().'.xml'); $content['info']= array('username'=>'test1','uid'=>'test2','name'=>array('tttt'=>'wwww1','www2'=>'sfgsd')) ; $xml->fromArray($content); // $xml->output(); $xml_=new myXmlReader(); $xml_->parseFile('1408355059.xml'); $tree = $xml_->getTree(); //print_r($tree);
0 0
- php xml与数组相互转化
- php数组与xml的相互转化
- php数组和xml之间相互转化
- xml格式与数组格式相互转化
- xml数组之间相互转化
- PHP 字符串与数组间的相互转化
- PHP URL参数与数组相互转化笔记
- 数组与list相互转化
- byte数组与int数组相互转化
- 对象和数组的相互转化 php
- PHP 对象和数组的相互转化
- PHP 对象和数组的相互转化
- PHP 对象和数组的相互转化
- php中XML与数组的相互转换
- 关于图片与XML文件相互转化
- 对象与Xml的相互转化
- DataTable与Xml的相互转化
- XML与C++对象的相互转化
- vim插件:pylint
- HDU 4602 快速求幂
- 高德地图route(路线)+GPS
- 图片轮播
- 将土豆或者youku 的视频放到自己的网站上面.
- php xml与数组相互转化
- 分页
- 黑马程序员—UDP的发送端和接收端
- HDU1160--FatMouse's Speed
- codeforces 459C - Pashmak and Buses 【构造题】
- 常用控件RadioButton/CheckBox/Toast
- Keepalived
- 软件安装指南
- apache 403异常 You don't have permission to access on this server