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

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

内容导读

收集整理的这篇技术教程文章主要介绍了PHP解析xml格式数据工具类示例讲解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5082字,纯文字阅读大概需要8分钟

内容图文

这篇文章主要介绍了PHP解析xml格式数据工具类,涉及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基于数组实现的堆栈和队列功能示例详解

基于PHP7错误处理与异常处理方法详解

以上就是PHP解析xml格式数据工具类示例讲解的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的PHP解析xml格式数据工具类示例讲解全部内容,希望文章能够帮你解决PHP解析xml格式数据工具类示例讲解所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com