写这个文章主要是受数据库操作的影响,数据库有读取数据库,查询数据库等等的操作,我们总是会去把他写成一个数据库的类方便工作中使用,如果某一个项目的数据库并没有用数据库来集成而是用XML的,如果也有一个这样的类不是也很方便
<?php

/* Author:Yustar @ 2007-01-06
* xml操作类,读取、分析xml
* 本类在xmlize基础上改进封装
*/
class xmlparsing

{
var $data;

function xmlparsing($data) {

$this->data = $file;

}
function check($data){

if(file_exists($data)){
return 1;
}else{
return 0;
}

function xmlize($data, $WHITE=1) {

$data = trim($data);
$vals = $index = $array = array();
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, $WHITE);
if ( !xml_parse_into_struct($parser, $data, $vals, $index) )
{
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));

}
xml_parser_free($parser);

$i = 0;

$tagname = $vals[$i]['tag'];
if ( isset ($vals[$i]['attributes'] ) )
{
$array[$tagname]['@'] = $vals[$i]['attributes'];
} else {
$array[$tagname]['@'] = array();
}

$array[$tagname]["#"] = xml_depth($vals, $i);

return $array;
}

/*
*
* You don't need to do anything with this function, it's called by
* xmlize. It's a recursive function, calling itself as it goes deeper
* into the xml levels. If you make any improvements, please let me know.
*
*
*/

function xml_depth($vals, &$i) {
$children = array();

if ( isset($vals[$i]['value']) )
{
array_push($children, $vals[$i]['value']);
}

while (++$i < count($vals)) {

switch ($vals[$i]['type']) {

case 'open':

if ( isset ( $vals[$i]['tag'] ) )
{
$tagname = $vals[$i]['tag'];
} else {
$tagname = '';
}

if ( isset ( $children[$tagname] ) )
{
$size = sizeof($children[$tagname]);
} else {
$size = 0;
}

if ( isset ( $vals[$i]['attributes'] ) ) {
$children[$tagname][$size]['@'] = $vals[$i]["attributes"];
}

$children[$tagname][$size]['#'] = xml_depth($vals, $i);

break;


case 'cdata':
array_push($children, $vals[$i]['value']);
break;

case 'complete':
$tagname = $vals[$i]['tag'];

if( isset ($children[$tagname]) )
{
$size = sizeof($children[$tagname]);
} else {
$size = 0;
}

if( isset ( $vals[$i]['value'] ) )
{
$children[$tagname][$size]["#"] = $vals[$i]['value'];
} else {
$children[$tagname][$size]["#"] = '';
}

if ( isset ($vals[$i]['attributes']) ) {
$children[$tagname][$size]['@']
= $vals[$i]['attributes'];
}

break;

case 'close':
return $children;
break;
}

}

return $children;

}


/* function by acebone@f2s.com, a HUGE help!
*
* this helps you understand the structure of the array xmlize() outputs
*
* usage:
* traverse_xmlize($xml, 'xml_');
* print '<pre>' . implode("", $traverse_array . '</pre>';
*
*
*/

function traverse_xmlize($array, $arrName = "array", $level = 0) {

foreach($array as $key=>$val)
{
if ( is_array($val) )
{
traverse_xmlize($val, $arrName . "[" . $key . "]", $level + 1);
} else {
$GLOBALS['traverse_array'][] = '$' . $arrName . '[' . $key . '] = "' . $val . "" ";
}
}

return 1;

}
}
?>
<?php
/* Author:Yustar @ 2007-01-06
* xml操作类,读取、分析xml
* 本类在xmlize基础上改进封装
*/
class xmlparsing
{
var $data;
function xmlparsing($data) {
$this->data = $file;
}
function check($data){
if(file_exists($data)){
return 1;
}else{
return 0;
}
function xmlize($data, $WHITE=1) {
$data = trim($data);
$vals = $index = $array = array();
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, $WHITE);
if ( !xml_parse_into_struct($parser, $data, $vals, $index) )
{
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
xml_parser_free($parser);
$i = 0; 
$tagname = $vals[$i]['tag'];
if ( isset ($vals[$i]['attributes'] ) )
{
$array[$tagname]['@'] = $vals[$i]['attributes'];
} else {
$array[$tagname]['@'] = array();
}
$array[$tagname]["#"] = xml_depth($vals, $i);
return $array;
}
/*
*
* You don't need to do anything with this function, it's called by
* xmlize. It's a recursive function, calling itself as it goes deeper
* into the xml levels. If you make any improvements, please let me know.
*
*
*/
function xml_depth($vals, &$i) {
$children = array(); 
if ( isset($vals[$i]['value']) )
{
array_push($children, $vals[$i]['value']);
}
while (++$i < count($vals)) { 
switch ($vals[$i]['type']) { 
case 'open': 
if ( isset ( $vals[$i]['tag'] ) )
{
$tagname = $vals[$i]['tag'];
} else {
$tagname = '';
}
if ( isset ( $children[$tagname] ) )
{
$size = sizeof($children[$tagname]);
} else {
$size = 0;
}
if ( isset ( $vals[$i]['attributes'] ) ) {
$children[$tagname][$size]['@'] = $vals[$i]["attributes"];
}
$children[$tagname][$size]['#'] = xml_depth($vals, $i);
break; 

case 'cdata':
array_push($children, $vals[$i]['value']);
break; 
case 'complete':
$tagname = $vals[$i]['tag'];
if( isset ($children[$tagname]) )
{
$size = sizeof($children[$tagname]);
} else {
$size = 0;
}
if( isset ( $vals[$i]['value'] ) )
{
$children[$tagname][$size]["#"] = $vals[$i]['value'];
} else {
$children[$tagname][$size]["#"] = '';
}
if ( isset ($vals[$i]['attributes']) ) {
$children[$tagname][$size]['@']
= $vals[$i]['attributes'];
} 
break; 
case 'close':
return $children;
break;
} 
} 
return $children;
}

/* function by acebone@f2s.com, a HUGE help!
*
* this helps you understand the structure of the array xmlize() outputs
*
* usage:
* traverse_xmlize($xml, 'xml_');
* print '<pre>' . implode("", $traverse_array . '</pre>';
*
*
*/ 
function traverse_xmlize($array, $arrName = "array", $level = 0) {
foreach($array as $key=>$val)
{
if ( is_array($val) )
{
traverse_xmlize($val, $arrName . "[" . $key . "]", $level + 1);
} else {
$GLOBALS['traverse_array'][] = '$' . $arrName . '[' . $key . '] = "' . $val . "" ";
}
}
return 1;
}
}
?>
543

被折叠的 条评论
为什么被折叠?



