本文实例讲述了PHP解析xml格式数据工具类。分享给大家供大家参考,具体如下:
html' target='_blank'>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基于数组实现的堆栈和队列功能示例详解
基于PHP7错误处理与异常处理方法详解
以上就是PHP解析xml格式数据工具类示例讲解的详细内容,PHP教程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答