第一次用PHP,请教一个类调用的实例?

clbo 2008-12-09 09:56:17
这是一个生成XML的代码,请教一下怎么使用这个类,麻烦给个实例,谢谢!!


<?
class Xml_Create{

var $head_str;//XML文件头部声明
var $is_create;//是否已经使用当前数据生成XML字符串
var $base_node_name;//根节点名称
var $default_node_name;
var $node_type_arr;

//private 靠 PHP4不支持
var $data_stack;
var $node_count_num;
var $xml_content;
var $debug;
var $node_cnt_arr;

var $version = '1.0';

function Xml_Create($coding_set='GB2312',$debug=false){
$this->head_str = '<?xml version="1.0" encoding="'.$coding_set.'" ?>';
$this->data_stack = array();
$this->node_count_num = 0;
$this->xml_content = '';
$this->is_create = false;
$this->element_name_value = '';
$this->content_array = Array();
$this->default_node_name = 'item';
$this->node_type_arr = array('Element','CDATA');
$this->node_cnt_arr = array();
if(is_bool($debug)){
$this->debug = $debug;
}else{
$this->debug = false;
}

}

function set_base_node($base_node_name){
$base_node_name = trim($base_node_name);
if($base_node_name){
$this->base_node_name = $base_node_name;
}else{
$this->base_node_name = 'XmlBaseNode';
}

}

//$node_name 节点名称
//$node_data 节点值
//$node_type 节点类型
//$attribute 节点属性
//$sub_element 节点的子元素
function add_node($node_name,$node_data,$node_type='Element',$attribute='',$sub_element=''){
if(!trim($node_name)){
$node_name = $this->default_node_name;
}
if(!$this->node_cnt_arr[$node_name]){
$this->node_cnt_arr[$node_name] = 0;
}
$this->node_cnt_arr[$node_name]++;
$index = $this->node_cnt_arr[$node_name];
if(!in_array($node_type,$this->node_type_arr)){
$node_type = 'Element';
}
$cnt = count($this->data_stack[$node_name]);
$this->data_stack[$node_name][$index]['type'] = $node_type;
$this->data_stack[$node_name][$index]['value'] = $node_data;
if(!empty($attribute) && is_array($attribute)){
foreach($attribute as $att_name=>$att_val){
$this->data_stack[$node_name][$index]['attribute'][$att_name] = $att_val;
}
}else{
$this->data_stack[$node_name][$index]['attribute'] = '';
}

if(!empty($sub_element) && is_array($sub_element)){
foreach($sub_element as $el_name=>$el_val){
$this->data_stack[$node_name][$index]['sub_element'][$el_name] = $el_val;
}
}else{
$this->data_stack[$node_name][$index]['sub_element'] = '';
}
$this->node_count();
}

function delete_node($node_name,$index=1){
unset($this->data_stack[$node_name][$index]);
if(empty($this->data_stack[$node_name])){
unset($this->data_stack[$node_name]);
}
$this->node_count();
}

function node_count(){
$this->node_count_num = count($this->data_stack);
}

function get_node_count(){
//$this->node_count();
return $this->node_count_num;
}

function get_data_stack(){
return $this->data_stack;
}

function save_to_file($file_path,$is_clear=true){
if(!$this->is_create){
$this->create_xml_content();
}
$fp = @fopen($file_path,'w');
if(!$fp){
$dir = dirname($file_path);
if(!is_dir($dir)){
@mkdir($dir,0777);
@chmod($dir,0777);
}
@unlink($file_path);
$fp = @fopen($file_path,'w');
}
$tag = fwrite($fp,$this->xml_content);
@fclose($fp);

if(!$tag){
$this->show_message("\n保存文件: ".$file_path." 出错了,请检查!\n");
}

//保存文件后清除没用的数据
if($is_clear){
$this->clear_data();
}
return true;
}

//生成当前数据的XML内容
function create_xml_content(){
if(empty($this->data_stack)){
$this->show_message("ERROR: 没有数据 无法生成XML\n");
//$this->clear_data();
}else{
$this->xml_content .= $this->head_str;
$this->xml_content .= "\n<".$this->base_node_name.">\n";

foreach($this->data_stack as $node_name=>$node_info){
foreach($node_info as $arr){
$this->xml_content .= " <".$node_name;
$current_data = $arr['value'];
if('CDATA'==$arr['type']){
$this->xml_content .= ">\n";
$this->xml_content .= " <![CDATA[\n ".$current_data."\n ]]>\n";
$this->xml_content .= " </".$node_name.">\n";
continue;
}
if(!empty($arr['attribute']) && is_array($arr['attribute'])){
foreach($arr['attribute'] as $att_name=>$att_val){
$this->xml_content .= ' '.$att_name.'="'.$att_val.'"';
}
}
$this->xml_content .= ">\n";
$tag = true;//如果有子属性就不写当前值
if(!empty($arr['sub_element']) && is_array($arr['sub_element'])){
$tag = false;
foreach($arr['sub_element'] as $el_name=>$el_val){
$this->xml_content .= ' <'.$el_name.'>'.$el_val.'</'.$el_name.">\n";
}
}
if($tag){
$this->xml_content .= " ".$current_data."\n";
}
$this->xml_content .= " </".$node_name.">\n";
}
}

$this->xml_content .= "</".$this->base_node_name.">";
$this->is_create = true;
}
if($this->debug){
$this->show_message($this->xml_content);
}
return ;
}

function clear_data(){

$this->is_create = false;

$this->data_stack = array();
$this->node_count_num = 0;
$this->xml_content = '';
$this->node_cnt_arr = array();
}

function show_message($message){
echo $message;
}

//报错并停止运行
function halt_message($message){
echo $message."\n";
die();
}

function __destruct(){
//echo "OK-- 这是PHP5的析构函数!\n";
}

function readXml($filename) { //用于测试是否返回正确的数组
// read the xml database of aminoacids
$data = implode("",file($filename));
$parser = xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parse_into_struct($parser,$data,$values,$tags);
xml_parser_free($parser);

// loop through the structures
$ap = 0;
foreach ($tags as $key=>$val) {
if ($key == "item") {
$molranges = $val;
// each contiguous pair of array entries are the
// lower and upper range for each molecule definition
for ($i=0; $i < count($molranges); $i+=2) {
$offset = $molranges[$i] + 1;
$len = $molranges[$i + 1] - $offset;
$temp_arr = array_slice($values, $offset, $len);
if($temp_arr)
foreach($temp_arr as $arr)
$tdb['item'][$ap][$arr['tag']] = $arr['value'];
$ap++;
}
} else {
if(sizeof($tags[$key]) == 1)
$tdb[$key] = $values[$tags[$key][0]]['value'];
}
}
return $tdb;
}
}//end of class
?>
...全文
51 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
knight0450 2008-12-09
2楼 UP
回复
clbo 2008-12-09
多谢,现在会用了!
回复
aniwn 2008-12-09
答案已经有了,帮顶了
回复
phpboy 2008-12-09
UP


require_once("");

$xml = new Xml_Create('GB2312',false);
$xml-> ...

回复
程序猿之殇 2008-12-09
简单生成xml!

<?php
require_once "xml.php";
/*
Xml_Create($coding_set='GB2312',$debug=false)
@coding_set 数据的编码
@debug 是否启用debug模式
*/
$xmlObj = new Xml_Create("gb2312", false);
$xmlObj->set_base_node("base");
/*
function add_node($node_name,$node_data,$node_type='Element',$attribute='',$sub_element='')
@node_name节点名
@node_data 节点数据
@node_type Element或者CDATA
@attribute 为节点的描述
@sub_element 子节点,不过只支持一维数组
*/
$xmlObj->add_node("node1", "222", "Element", 'test', array('id'=>1, 'name'=>'222'));
$xmlObj->add_node("node2", "333");
$xmlObj->add_node("node3", "444");

//生成xml串,可以通过$xmlObj->xml_content获取生成的串
$xmlObj->create_xml_content();
echo $xmlObj->xml_content;

//将xml保存成文件,此函数第二个参数决定是否清除xml
$xmlObj->save_to_file("./t1111.xml");
?>
回复
hzcenter 2008-12-09
$xml = new Xml_Create('GB2312',false);
$xml-> ...
回复
相关推荐
发帖
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
帖子事件
创建了帖子
2008-12-09 09:56
社区公告
暂无公告