码迷,mamicode.com
首页 > Web开发 > 详细

php关于xml文件的操作--修改和删除

时间:2015-07-08 12:49:05      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

继续以昨天创建的stu.xml文件为目标进行操作。

1、修改

明确几个操作:

  A:修改节点->可以用替换replaceChild;

  B:修改节点值->nodeValue是可以直接赋值的;

  C:修改属性值->setAttribute(),面向对象的类中经常会有这种setXXX、getXXX的操作。

先看一下stu.xml文件的内容:

[root@rh64-ljl xml]# cat stu.xml 
<?xml version="1.0" encoding="utf-8"?>
<class>
  <studentinfo tag="BeiJing">
    <name>lily</name>
    <age>18</age>
    <city>BeiJing</city>
    <addr>street bj8</addr>
  </studentinfo>
  <studentinfo tag="ShangHai">
    <name>lucy</name>
    <age>20</age>
    <city>ShangHai</city>
    <addr>street sh2</addr>
  </studentinfo>
</class>
[root@rh64-ljl xml]# 

 看代码:

<?php

$dom = new DomDocument();
$dom->load(‘stu.xml‘);

$students = $dom->getElementsByTagName(‘studentinfo‘);

foreach($students as $stu){
	$tag = $stu->getAttribute(‘tag‘);  //获取tag属性的值
	if($tag == ‘BeiJing‘){
		$stu->setAttribute(‘tag‘,‘China‘);  //修改tag属性的值
	}
	
	$nameNode = $stu->getElementsByTagName(‘name‘)->item(0);  //获取name节点
	$nameValue = $nameNode->nodeValue;  //获取name节点的值
	if($nameValue == ‘lily‘){
		$nameNode->nodeValue = ‘meimei‘;   //如果name节点的值为lily,则将其改为meimei
	}

	if($nameValue == ‘lucy‘){
		$new = $dom->createElement($nameValue);  //创建新的节点
		$new->appendChild($dom->createTextNode($nameValue));  //创建新的节点值
		$stu->replaceChild($new,$nameNode);  //如果name节点的值为lucy,则将其替换
	}
}

$dom->save(‘stu.xml‘);  //保存

?>

 看一下执行后的结果:

[root@rh64-ljl xml]# php modifyXml.php 
[root@rh64-ljl xml]# cat stu.xml 
<?xml version="1.0" encoding="utf-8"?>
<class>
  <studentinfo tag="China">
    <name>meimei</name>
    <age>18</age>
    <city>BeiJing</city>
    <addr>street bj8</addr>
  </studentinfo>
  <studentinfo tag="ShangHai">
    <lucy>lucy</lucy>
    <age>20</age>
    <city>ShangHai</city>
    <addr>street sh2</addr>
  </studentinfo>
</class>
[root@rh64-ljl xml]# 

 可以看到:

  1.tag属性由BeiJing变成了China;

  2.值lily变成了meimei;

  3.<name>lucy</name>被替换成了<lucy>lucy</lucy>

既定的目标均能够实现。

 

2、删除

先明确一下可能的操作:

  A.删除节点->removeChild();

  B.删除节点值(这个直接用赋值的方法赋个空值就可以,略过);

  C.删除属性值->removeAttribute();

还是以本文最顶上的stu.xml文件为目标来进行操作。

看代码:

<?php

$dom = new DomDocument();
$dom->load(‘stu.xml‘);

$stu = $dom->getElementsByTagName(‘studentinfo‘);
foreach($stu as $s){
	$s->removeAttribute(‘tag‘);  //删除tag属性值
	$name = $s->getElementsByTagName(‘name‘)->item(0)->nodeValue;
	echo "$name\n";
	$s->removeChild($s->getElementsByTagName(‘name‘)->item(0));  //删除name节点
	break;  //在对第1个studentinfo标记内的内容操作完成后,退出遍历。
}

$x = new domxpath($dom);  //换种方法删除下一个,上面的break也是为这考虑
$stuinfo = $x->query("/class/studentinfo");  //定位
$nameNode = $stuinfo->item(1)->getElementsByTagName(‘name‘)->item(0);  //item(0)在上面遍历时已完成
$nameValue = $stuinfo->item(1)->getElementsByTagName(‘name‘)->item(0)->nodeValue;
echo "$nameValue\n";

//$stuinfo->item(1)->removeChild($nameNode);  //这两个删除的语句实现功能相同
$nameNode->parentNode->removeChild($nameNode);

$dom->save(‘stu.xml‘);

?>

 执行一下,看看结果如何:

[root@rh64-ljl xml]# php removeXml.php 
lily
lucy
[root@rh64-ljl xml]# cat stu.xml 
<?xml version="1.0" encoding="utf-8"?>
<class>
  <studentinfo>
    
    <age>18</age>
    <city>BeiJing</city>
    <addr>street bj8</addr>
  </studentinfo>
  <studentinfo tag="ShangHai">
    
    <age>20</age>
    <city>ShangHai</city>
    <addr>street sh2</addr>
  </studentinfo>
</class>
[root@rh64-ljl xml]# 

 可以看到,第1个studeninfo标记内的tag属性已经被删除,name节点也被删除,第2个studentinfo标记内的name节点同样被删除了,但是没有对tag属性进行操作,所以仍然存在。

xml相关的操作就先整理到这儿,创建、查询、修改和删除4种操作都有了。

php关于xml文件的操作--修改和删除

标签:

原文地址:http://www.cnblogs.com/liangjl/p/4629773.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!