MySQL xml添加子节点_详解SimpleXML添加_修改_删除_遍历XML节点属性

SimpleXML概述

要处理XML 文件,有两种传统的处理思路:SAX 和DOM。SAX 基于事件触发机制,对XML 文件进行一次扫描,完成要进行的处理;DOM 则将整个XML 文件构造为一棵DOM树,通过对DOM 树的遍历完成处理。这两种方法各有优缺点,SAX 的处理思路相对抽象,DOM 的处理过程相对烦琐,都不很适合新手的入门。

PHP5 推出了一套新的XML 处理函数,即SimpleXML。名如其实,SimpleXML 本身小巧精干,只提供了少量的几个方法函数,但用它处理起XML 文件功能却非常强大,操作也非常的简单。

首先,它提供有简单的函数可以从XML 文档、字符串、或DOM 对象上直接构造出SimpleXMLElement 对象;其次,SimpleXMLElement 提供有简单的方法可以进行属性、子节点、和XPath 的操作;然而,SimpleXML 最简单的地方是,它提供有使用标准对象的属性和对象迭代器进行节点操作的方法,这一处理思路使得用PHP 对XML 文档的处理得到了极大的简化。

SimpleXML操作简要总结

simplexml_load_file()  从 XML 文档获取 SimpleXMLElement 对象。  5

simplexml_load_string()  从 XML 字符串获取 SimpleXMLElement 对象。

simplexml_import_dom()  把 DOM 节点转换为 SimpleXMLElement 对象。

(以上3个加载函数返回SimpleXMLElement对象,其路径在根标记上)

addAttribute()  给 SimpleXML 元素添加一个属性。

addChild()  给 SimpleXML 元素添加一个子元素。

asXML()  从 SimpleXML 元素获取 XML 字符串。

attributes()  获取 SimpleXML 元素的属性。

children()  获取指定节点的子。

getName()  获取 SimpleXML 元素的名称。

xpath()  对 XML 数据运行 XPath 查询。

$xml->$key=$value;  修改指定标签的值

$xml->$key->attributes()->属性id=$attr;   修改属性的值

unset($xml->$key);   删除标签行

SimpleXML应用案例一:

$string = <<

1

1

XML;

$xml = simplexml_load_string($string);

//显示xml属性,var_dump()、print_r不能够显示节点属性值

foreach($xml->foo[0]->attributes() as $a => $b) {

echo $a,'="',$b,"\"\n";

}

///给 SimpleXML 元素添加属性

$xml->addAttribute("type","html");

$xml->addAttribute("name","top");

$xml->foo[1]->addAttribute("other","ok");

var_dump($xml->foo[1]->attributes());

//向指定的 XML 节点添加一个子节点

$xml->addChild("data","2014.5.26");

var_dump($xml);

echo "


";

//把SimpleXMLElement对象返回可写入文件的文本字符串

print($xml->asXML());

SimpleXML应用案例二:

$string2=<<

George

John

Reminder

text

stuff

code

XML;

$xml2 = simplexml_load_string($string2);

// 遍历子节点的属性名和值

foreach ($xml2->children()as $child)

{

foreach($child->attributes() as $a => $b){

echo "
".$child.":".$a."==".$b;

}

}

//遍历子节点之下的标签名和值

foreach($xml2->children() as $a=>$b){

echo "
".$a."---".$b;

}

echo "


";

//只获取元素名称

foreach($xml2->children() as $ch){

echo "
".$ch->getName();

}

echo "


";

//使用路径定位节点

$mynode=$xml2->xpath("/note/a/b");

var_dump($mynode);

asXML()将SimpleXML对象文本化并保存XML文件:

$file = fopen($url,"w");

fwrite($file,$xml->asXML());

fclose($file);

一个SimpleXML封装类:

classSimpleXML{

public$data="";

//从 XML 文档获取 SimpleXMLElement 对象

public functionxml_simplexml_load_file($url){

if(file_exists($url)) {

$this->data=simplexml_load_file($url);

}else{

exit($url."
文件不存在!");

}

}

// 从 XML 字符串获取 SimpleXMLElement 对象

public functionxml_simplexml_load_string($xml_string){

$this->data=simplexml_load_string($xml_string);

}

//把 DOM 节点转换为 SimpleXMLElement 对象

public functionxml_simplexml_import_dom($dom){

$this->data=simplexml_import_dom($dom);

}

// 给 SimpleXML 元素添加一个子元素

public functionxml_addchild($simplexml,$name,$value){

$simplexml->addChild($name,$value);

}

// 给 SimpleXML 元素添加一个属性

public functionxml_addattribute($simplexml,$name,$value){

$simplexml->addAttribute($name,$value);

}

//返回 SimpleXML 元素获取 XML 字符串

public functionxml_asxml($simplexml){

return$simplexml->asXML();

}

//返回获取 SimpleXML 元素的属性

public functionxml_attributes($simplexml){

return$simplexml->attributes();

}

//打印 SimpleXML 元素的属性

public functionxml_attributes_show($simplexml){

foreach($simplexml->attributes() as$a=>$b){

print($a."=".$b."
");

}

}

//返回指定节点的子节点SimpleXML

public functionxml_getchildren($simplexml){

return$simplexml->children();

}

//返回 SimpleXML 元素的名称

public functionxml_getname($simplexml){

return$simplexml->getName();

}

//返回指定路径的SimpleXML

public functionxml_getxpath($simplexml,$path_str){

return$simplexml->xpath($path_str);

}

//返回以标签名为键值,某一属性为值的数组

public functionxml_getattributes_arr($attr_name){

$re_arr=array();

foreach($this->data as$d){

foreach($d->attributes() as$a=>$b){

if($a==$attr_name)

$re_arr[$this->xml_getname($d)]=$b;

}

}

return$re_arr;

}

//检查是否存在重复的key

public functionxml_rekey($key){

$re_bool=false;

foreach($this->data as$d){

if($this->xml_getname($d)==$key){

$re_bool=true;

}

}

return$re_bool;

}

//追加节点

public functionxml_add($key,$value,$attr){

$this->data->addChild($key,$value);

$this->data->$key->addAttribute("nicheng",$attr);

}

//保存xml

public functionxml_save($url){

$save_xml=$this->data->asXML();

$file = fopen($url,"w");

fwrite($file,$save_xml);

fclose($file);

}

//修改XML元素

public functionxml_update($key,$value,$attr){

$this->data->$key=$value;

$this->data->$key->attributes()->nicheng=$attr;

}

//删除XML元素

public functionxml_delete($key){

unset($this->data->$key);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值