PHP operates XML with full-featured xml operation class_PHP tutorial

WBOY
Release: 2016-07-13 17:40:53
Original
721 people have browsed it

编程之家提供一个功能齐全的xml操作类


/* xml操作类 */
class operXml
{
    var $parser;

    public function __construct()
    {
        $this->parser = xml_parser_create();
        xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
        xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, 1);

        xml_set_object($this->parser, $this);
        xml_set_element_handler($this->parser, "tag_open", "tag_close");
        xml_set_character_data_handler($this->parser, "cdata");
    }

    public function parse($xmlStr="",$endtag=true)
    {
     $this->endtag = $endtag;
     $this->xmlStr = $xmlStr;
     $this->tree = new stdClass;
     $this->tree->tag = "root";
     $this->tree->props = new stdClass;
     $this->tree->children = array();
     $this->tree->p = NULL;
     $this->tree->level = -1;
     $this->deep = 0;
     $this->pList = array($this->tree);
     xml_parse($this->parser, $this->xmlStr);
    if(count($this->tree->children)>0)
        $this->root = $this->tree->children[0];
    else
       $this->root = NULL;
    return $this;
   }

   public function tag_open($parser, $tag, $attributes)
   {
  $o = new stdClass;
  $o->p = $this->pList[$this->deep];
  $o->index = count($o->p->children);
  $o->level = $o->p->level 1;
  $o->tag = $tag;
  $o->props = new stdClass;
  while(list($key,$value)=each($attributes))
  $o->props->{$key} = $value;
  $o->value = "";
  $o->children = array();
  array_push($o->p->children,$o);
  $this->deep ;
  $this->pList[$this->deep] = $o;
    }

    public function cdata($parser, $cdata)
    {
        $this->pList[$this->deep]->value = $cdata;
    }

public function tag_close($parser, $tag)
{
$this->deep--;
}

public function getNodeByProp() // According to Attribute name and value get the node,
{          // Parameters: attribute name, attribute value 1, attribute value 2, attribute value 3,...
 $args = func_get_args();
 $node = $ this->tree;
for($i=1;$i {
$node = $this->_getNodeByProp($node,$args [0],$args[$i]);
if($node==NULL) break;
}
return $node;
}

public function getChildByTag( $node,$tag) // Get the node labeled $tag under the $node node
{
for($i=0;$ichildren);$i )
{
if($node->children[$i]->tag==$tag)
return $node->children[$i];
}
return NULL;
}

public function getChildsByTag($node,$tag) // Get the node with the tag $tag under the $node node and return the node list array
{
$rs = array();
for($i=0;$ichildren);$i )
if($node->children[$i]->tag= =$tag)
array_push($rs,$node->children[$i]);
return $rs;
}

public function addRoot($tag) // Add root node
{
$this->tree->children = array();
$this->root = $this->addChild($this->tree,$ tag);
return $this->root;
}

public function addChild($node,$tag) // Add a node with the tag $tag under the $node node, and Return the added node
{
$o = new stdClass;
$o->p = $node;
$o->level = $node->level 1;
$o->index = count($node->children);
$o->tag = $tag;
$o->props = new stdClass;
$o- >value = "";
$o->children = array();
array_push($node->children,$o);
return $o;
}

public function delete($node) // Delete $node node
{
$p = $node->p;
array_splice($p->children,$node-> ;index,1);
for($i=0;$ichildren);$i )
$p->children[$i]->index = $i;
}

public function move($dstNode,$srcNode) // Move srcNode below $dstNode
{
$this->delete($srcNode);
$srcNode->p = $dstNode;
$srcNode->level = $dstNode->level 1;
$srcNode->index = count($dstNode->children) ;
array_push($dstNode->children,$srcNode);
}

public function __toString() // Return xml format string
{
$s = "" ;
for($i=0;$itree->children);$i )
$s .= $this->traversalNodeToXml($this-> tree->children[$i],$this->endtag);
return $s;
}

 public function save($xmlFile)  // 保存成xml格式文件
 {
  $content = $this->__toString();
  
  $fp = @fopen($xmlFile,"w") or die("创建文件失败:".$xmlFile);
  @fwrite($fp,$content);
  @fclose($fp);
  @chmod($xmlFile,0777);
 }
 
 private function traversalNodeToXml($treeNode,$endtag)
 {
  $space = "";
  $space = str_pad($s,$treeNode->level*2," ",STR_PAD_LEFT);
  $s = $space."<".$treeNode->tag;
  while(list($key,$value)=each($treeNode->props))
   $s .= " $key="$value"";
  $childCount = count($treeNode->children);
  if($childCount==0)
  {
   if($treeNode->value!="" || $endtag)
    $s .= ">".$treeNode->value."tag."> ";
   else
    $s .= "/> ";
   return $s;
  }
  
  $s .= "> ";
  for($i=0;$i<$childCount;$i )
   $s .= $this->traversalNodeToXml($treeNode->children[$i],$endtag);
  $s .= $space."tag."> ";
  return $s;
 }
 
 private function _getNodeByProp($node,$propName,$propValue)
 {
  for($i=0;$ichildren);$i )
  {
   $anode = $node->children[$i];
   if(isset($anode->props) && isset($anode->

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/486173.htmlTechArticle编程之家提供一个功能齐全的xml操作类 ? /* xml操作类 */ class operXml { var $parser; public function __construct() { $this-parser = xml_parser_create(); xml_parser...
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!