⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xml.class.inc

📁 groupoffice
💻 INC
字号:
<?php/*** @copyright 2003* @author Nicolas Bougues, <nicolas@bougues.net>* @version $Revision: 1.12 $ $Date: 2005/11/25 16:06:03 $** This program is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public License as published by the* Free Software Foundation; either version 2 of the License, or (at your* option) any later version.**//*** A simple class to manage XML documents** @package Framework* @subpackage XML  * @since    Group-Office 2.10*/class xml_node_c {	function get_attribute($id)  {  	if(isset($this->_attribs[$id]))  	{  		return $this->_attribs[$id];		}		return false;  }};class xml_tree_node_c extends xml_node_c {  var $_name;  var $_children;  var $_attribs;  function children_count () {    return count($this->_children);  }  function &children() {    return $this->_children;  }  function &get_child ($name) {    $seg = substr ($name, 0, strcspn ($name, "/"));		    if (is_array ($this->_children)) {      foreach ($this->_children as $child) {				if (strcasecmp ($child->get_name(), $seg) == 0) {								  if ($seg == $name) {				    return $child;				  } else {				    $child = &$child->get_child (substr ($name,								      strcspn ($name, "/") + 1));						return $child;				  }				}      }    }     //    printf ("get_child in %s for %s(%s) returning null\n",     //	    $this->_name, $name, $seg);    $child = null;    return $child;  }  function get_data ($name='') {        //    printf ("Get data for %s\n", $name);			if($name=='')	{		return trim($this->_children[0]->get_data());	}else	{	    $tmp = $this->get_child ($name);	    	    if ($tmp)	    {	      return trim($tmp->_children[0]->get_data());	    }else	    {	      return NULL;	     }	 }  }      function &xml_tree_node_c ($name, $attribs) {    $this->_name = $name;    $this->_attribs = $attribs;    $this->_children = array();    return $this;  }  function set_attribs ($attribs) {    $this->_attribs = $attribs;  }  function &add_child ($xml_node) {    return ($this->_children[] = &$xml_node);  }  function &new_child ($name, $attribs) {    $tmp = &$this->add_child (new xml_tree_node_c ($name, $attribs));    return $tmp;  }  function &new_child_data ($name, $attribs, $data) {    $tmp = &$this->add_child (new xml_tree_node_c ($name, $attribs));    $tmp->add_child (new xml_text_node_c ($data));    return $tmp;  }  function get_name () {    return $this->_name;  }  function print_node ($recurse, $rec_level) {    $result = "";    /*for ($i = 0; $i < 2*$rec_level; $i++)      $result .= " ";*/    $result .= "<" . $this->_name;    if (is_array ($this->_attribs)) {      foreach ($this->_attribs as $key => $val) {	$result .= " " . $key . "=\"" . $val . "\"";       }    }		if(count($this->_children) > 0)		{    	$result .= ">";	    $newl = 0;		    if ($recurse) {	      foreach ($this->_children as $child) {					if (!$newl && (get_class ($child) != "xml_text_node_c")) {					  $newl = 1;					  $result .= "\n";					}					$result .= $child->print_node ($recurse, $rec_level+1);	      }	    }		   /* if ($newl)	      for ($i = 0; $i < 2*$rec_level; $i++)	        $result .= " ";*/		    $result .= "</" . $this->_name . ">\n";	  }else	  {	  	//$result .= "/>\n";	  	$result .= "></" . $this->_name . ">\n";	  }    return $result;  }   function get_xml()	{		return $this->print_node(1,0);	}	function get_size()	{		return strlen($this->get_xml());	}};class xml_text_node_c extends xml_node_c {  var $_data;  function &xml_text_node_c ($data) {    $this->_data = $data;    return $this;  }  function get_data () {    return $this->_data;  }  function print_node ($recurse, $rec_level) {        $result = "";    $result .= $this->_data;    return $result;  }  function get_xml()	{		return "<?xml version=\"1.0\" ?>\n".			$this->print_node(1,0);	}	function get_size()	{		return strlen($this->get_xml());	}};function text_to_xml ($xml_text) {  $xml_parser = xml_parser_create ();  xml_parser_set_option ($xml_parser, XML_OPTION_CASE_FOLDING, FALSE);  if (!xml_parse_into_struct ($xml_parser, $xml_text, $values, $index)) {  $error = sprintf("XML error: %s at line %d",		xml_error_string(xml_get_error_code($xml_parser)),		xml_get_current_line_number($xml_parser));		  	go_log(LOG_DEBUG, sprintf($error));  	go_log(LOG_DEBUG, "XML: ".$xml_text);    die($error);  }    xml_parser_free($xml_parser);  // Now, make the objects  $stackpos = 0;  $stack = array();  foreach ($values as $val) {    switch ($val["type"]) {    case "open":      if (count($stack)) {	$stack[$stackpos] = & $stack[$stackpos-1]->new_child ($val["tag"],							      @$val["attributes"]);      } else {	$stack[$stackpos] =  &new xml_tree_node_c ($val["tag"],						   @$val["attributes"]);      }      $stackpos++;      break;    case "complete":      if (count($stack))	$stack[$stackpos] = 	  & $stack[$stackpos-1]->add_child (new xml_tree_node_c ($val["tag"], 								 @$val["attributes"]));      else {	$stack[$stackpos] = & new xml_tree_node_c ($val["tag"], 						   @$val["attributes"]);      }            $stack[$stackpos]->add_child (new xml_text_node_c (@$val["value"]));      break;    case "close":      if ($stackpos > 0) {	$stackpos--;      }      break;    default:      //      printf ("UNHANDLED: %s\n", $val["type"]);      //      print_r ($val);    }  }  return $stack[0];}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -