使用PHP 5.0 轻松解析XML文档

时 间: 2007-04-11     浏 览:0     来源:
removeNodeByName($rootNodeObj,$name){$rootNodeObj->removeNodeById($this->getNodeId($name));if(sizeof($this->nodes)==1)$this->no
removeNodeByName($rootNodeObj$name)
{
$rootNodeObj->removeNodeById($this->getNodeId($name));
if(
sizeof($this->nodes)==1)
$this->nodes = array();
else
unset(
$this->nodes[$name]);
}
protected function 
getNodeByName($rootNodeObj$name=null)
{
if(
$name==null)
{
$tmpList = array();
$tmpIds $this->getNodeId();
foreach(
$tmpIds as $key=>$id)
$tmpList[$key] = $rootNodeObj->getNodeById($id);
return 
$tmpList;
}
else
{
$id $this->getNodeId($name);
if(
$id===null)
{
$tmpIds $this->getNodeId();
foreach(
$tmpIds as $tkey=>$tid)
{
if(
strpos($key$name)==0)
{
$id $tid;
break;
}
}
}
return 
$rootNodeObj->getNodeById($id);
}
}
public function 
findNodeByPath($path)
{
$pos strpos($path'|');
if(
$pos<=0)
{
return 
$this->getNode($path);
}
else
{
$tmpObj $this->getNode(substr($path0$pos));
return 
is_object($tmpObj)? $tmpObj->findNodeByPath(substr($path$pos+1)): null;
}
}
public function 
getSaveData()
{
$data $this->values;
if(
sizeof($this->attributes)>0)
$data[attrs] = $this->attributes;
$nodeList $this->getNode();
if(
$nodeList==null)
return 
$data;
foreach(
$nodeList as $key=>$node)
{
$data[$key] = $node->getSaveData();
}
return 
$data;
}
public function 
getSaveXml($level=0)
{
$prefixSpace str_pad(""$level"t");
$str "$prefixSpace<$this->nodeTag";
foreach(
$this->attributes as $key=>$value)
$str .= " $key="$value"";
$str .= ">rn";
foreach(
$this->values as $key=>$value){
if(
is_array($value))
{
$str .= "$prefixSpacet<$key";
foreach(
$value[attrs] as $attkey=>$attvalue)
$str .= " $attkey="$attvalue"";
$tmpStr $value[value];
}
else
{
$str .= "$prefixSpacet<$key";
$tmpStr $value;
}
$tmpStr trim(trim($tmpStr"rn"));
$str .= ($tmpStr===null || $tmpStr==="")? " />rn"">$tmpStr</$key>rn";
}
foreach(
$this->getNode() as $node)
$str .= $node->getSaveXml($level+1)."rn";
$str .= "$prefixSpace</$this->nodeTag>";
return 
$str;
}
function 
__destruct()
{
unset(
$this->nodes$this->attributes$this->values);
}
}
?>
//文件:SimpleDocumentRoot.PHP

<?php
/**
*=========================================================
*
* @author hahawen(大龄青年)
* @since 2004-12-04
* @copyright Copyright (c) 2004, NxCoder Group
*
*=========================================================
*/
/**
* class SimpleDocumentRoot
* XML root class, include values/attributes/subnodes.
* all this pachage's is work for xml file, and method is action as DOM.
*
* @package SmartWeb.common.xml
* @version 1.0
*/
class SimpleDocumentRoot extends SimpleDocumentBase
{
private 
$prefixStr '<?xml version="1.0" encoding="utf-8" ?>';
private 
$nodeLists = array();
function 
__construct($nodeTag)
{
parent::__construct($nodeTag);
}
public function 
createNodeObject($pNodeId$name$attributes)
{
$seq sizeof($this->nodeLists);
$tmpObject = new SimpleDocumentNode($this$pNodeId$name$seq);
$tmpObject->setAttributes($attributes);
$this->nodeLists[$seq] = $tmpObject;
return 
$tmpObject;
}
public function 
removeNodeById($id)
{
if(
sizeof($this->nodeLists)==1)
$this->nodeLists = array();
else
unset(
$this->nodeLists[$id]);
}
public function 
getNodeById($id)
{
return 
$this->nodeLists[$id];
}
public function 
createNode($name$attributes)
{
return 
$this->createNodeByName($this$name$attributes, -1);
}
public function 
removeNode($name)
{
return 
$this->removeNodeByName($this$name);
}
public function 
getNode($name=null)
{
return 
$this->getNodeByName($this$name);
}
public function 
getSaveXml()
{
$prefixSpace "";
$str $this->prefixStr."rn";
return 
$str.parent::getSaveXml(0);
}
}
?>
//文件:SimpleDocumentNode.php 
<?php
/**
*=========================================================
*
* @author hahawen(大龄青年)
* @since 2004-12-04
* @copyright Copyright (c) 2004, NxCoder Group
*
*=========================================================
*/
/**
* class SimpleDocumentNode
* xml Node class, include values/attributes/subnodes.
* all this pachage's is work for xml file, and method is action as DOM.
*
* @package SmartWeb.common.xml
* @version 1.0
*/
class SimpleDocumentNode extends SimpleDocumentBase
{
private 
$seq null;
private 
$rootObject null;
private 
$pNodeId null;
function 
__construct($rootObject$pNodeId$nodeTag$seq)
{
parent::__construct($nodeTag);
$this->rootObject $rootObject;
$this->pNodeId $pNodeId;
$this->seq $seq;
}
public function 
getPNodeObject()
{
return (
$this->pNodeId==-1)? $this->rootObject$this->rootObject->getNodeById($this->pNodeId);
}
public function 
getSeq(){
return 
$this->seq;
}
public function 
createNode($name$attributes)
{
return 
$this->createNodeByName($this->rootObject$name$attributes$this->getSeq());
}
public function 
removeNode($name)
{
return 
$this->removeNodeByName($this->rootObject$name);
}
public function 
getNode($name=null)
{
return 
$this->getNodeByName($this->rootObject$name);
}
}
?>
下面是例子运行对结果:
下面是通过函数getSaveData()返回的整个XML数据的数组 
Array
(
[
name] => 华联
[address] => 北京长安街-9999号
[desc] => 连锁超市
[cat_food] => Array
(
[
attrs] => Array
(
[
id] => food
)
[
goods_food11] => Array
(
[
name] => food11
[price] => 12.90
[attrs] => Array
(
[
id] => food11
)
)
[
goods_food12] => Array
(
[
name] => food12
[price] => 22.10
[desc] => Array
(
[
value] => 好东西推荐
[attrs] => Array
(
[
creator] => hahawen
)
)
[
attrs] => Array
(
[
id] => food12
)
)
)
[
cat_1] => Array
(
[
goods_tel21] => Array
(
[
name] => tel21
[price] => 1290
[attrs] => Array
(
[
id] => tel21
)
)
)
[
cat_coat] => Array
(
[
attrs] => Array
(
[
id] => coat
)
[
goods_coat31] => Array
(
[
name] => coat31
[price] => 112
[attrs] => Array
(
[
id] => coat31
)
)
[
goods_coat32] => Array
(
[
name] => coat32
[price] => 45
[attrs] => Array
(
[
id] => coat32
)
)
)
[
special_hot] => Array
(
[
attrs] => Array
(
[
id] => hot
)
[
goods_0] => Array
(
[
name] => hot41
[price] => 99
)
)
)
//下面是通过setValue()函数,给给根节点添加信息,添加后显示出结果xml文件的内容 
<?xml version="1.0" encoding="GB2312" ?>
<
shop>
<
name>华联</name>
<
address>北京长安街-9999号</address>
<
desc>连锁超市</desc>
<
telphone>123456789</telphone>
<
cat id="food">
<
goods id="food11">
<
name>food11</name>
<
price>12.90</price>
</
goods>
<
goods id="food12">
<
name>food12</name>
<
price>22.10</price>
<
desc creator="hahawen">好东西推荐</desc>
</
goods>
</
cat>
<
cat>
<
goods id="tel21">
<
name>tel21</name>
<
price>1290</price>
</
goods>
</
cat>
<
cat id="coat">
<
goods id="coat31">
<
name>coat31</name>
<
price>112</price>
</
goods>
<
goods id="coat32">
<
name>coat32</name>
<
price>45</price>
</
goods>
</
cat>
<
special id="hot">
<
goods>
<
name>hot41</name>
<
price>99</price>
</
goods>
</
special>
</
shop

使用PHP 5.0 轻松解析XML文档评论:

搜服网友
目前文章还没有人评论

jdk1.6下载

JDK1.6中就是比1.5多了一些包,学习1.5也没有什么问题,懂了1.5,1....

tomcat/tomcat-6/v6.0.26/bin 下载

apache-tomcat-5.5.17-admin.tar.gz14-Apr-...

SQL Server 2000 下载地址

SQLSERVER2000各版本的运行环境企业版:操作系统要求WindowsNT...

tomcat的最新下载2010-06-09更新

tomcat的最新下载2010-06-09更新...

Apache Tomcat 6.0.1

apache-tomcat-6.0.1-deployer.tar.gz08-No...