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

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

1、修改

明确几个操作:

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

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

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

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

[[email protected] 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>
[[email protected] 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‘);  //保存

?>

看一下执行后的结果:

[[email protected] xml]# php modifyXml.php
[[email protected] 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>
[[email protected] 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‘);

?>

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

[[email protected] xml]# php removeXml.php
lily
lucy
[[email protected] 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>
[[email protected] xml]#

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

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

时间: 2024-08-03 18:37:23

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

python - XML文件及其操作

xml文件也是实现不同语言或者程序之间进行数据交换的协议,它的特点是尖括号开头,尖括号结尾.使用范围就更为广泛了,tomcat resin kvm 等等,使用了大量的xml文件来进行相关配置.先来看一个典型的xml文件吧: <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2023</year> &l

uinty中对Xml文件的操作

最近学习unity感觉到了瓶颈,然后就回顾一下学到的知识,将它们整理下来: unity中用户的登录与注册需要将用户名和密码保存起来的,方法有很多,如将其保存到数据库,或用JSON保存到磁盘,这里就简单说说用Xml对其进行读写操作吧: 首先,对Xml进行操作需要的命名空间是 using system.IO; using system.Xml; 先附上一段代码,再添加注释解释吧: using system.IO; using system.Xml; void Start() {     privat

C# xml文件读取与修改

c#读写xml文件已知有一个XML文件(bookstore.xml)如下: Code<?xml version="1.0" encoding="gb2312"?><bookstore> <book genre="fantasy" ISBN="2-3631-4"> <title>Oberon's Legacy</title> <author>Corets,

Git操作-修改与删除

管理修改 第一次修改 ->git add -> 第二次修改 ->git commit 如果第一次修改git add ,第二次修改还没来的及'git add',此时如果git commit 第二次的修改是没有在版本库的,Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交. 第一次修改 -> git

对XML文件进行的修改

XmlDocument xml = new XmlDocument(); xml.Load(Way);//获取相对路径 var Exports = xml.GetElementsByTagName("Export");//获取所有Export节点 var WorkSheets = xml.GetElementsByTagName("WorkSheet");//获取所有WorkSheet节点 for (int i = 0; i < Exports.Count;

Java知识积累-XML的DOM解析修改和删除方法

import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.Transformer;import javax.xml.tr

PHP操作XML文件学习笔记

原文:PHP操作XML文件学习笔记 XML文件属于标签语言,可以通过自定义标签存储数据,其主要作用也是作为存储数据. 对于XML的操作包括遍历,生成,修改,删除等其他类似的操作.PHP对于XML的操作方式很多,这次学习的是通过DOMDocument进行操作,其他的操作方法可以参考 http://www.oschina.net/code/snippet_110138_4727 1.对XML文件的遍历 通过DOMDocument对于XML文件的操作的方法:首先要实例化一个DOMDocument类的对

Spring Batch 简单应用 (三)(XML文件操作)

前篇关于Spring Batch的文章,讲述了Spring Batch 对CSV文件的读写操作. 本文将通过一个完整的实例,与大家一起讨论运用Spring Batch对XML文件的读写操作.实例流程是从一个XML文件中读取商品信息,经过简单的处理,写入另外一个XML文件中. 工程结构如下图: log4j.xml是log处理的配置文件,与本文没有必然联系,再此不做论述. application.xml文件内容如下: 按 Ctrl+C 复制代码 <?xml version="1.0"

操作引入xml文件的书包

轻开平台一个很重要的特点就是简化了对xml文件的操作,您能非常轻松地引入xml文件,定位到任意节点,增删属性和文本以及节点本身,下面咱们用实例来介绍对xml的操作 引入xml文件: <chtml><we>@{_samples/test.xml:e}</we></chtml> 或 <we>@{_samples/test.xml:HtokID=e0}</we> 在页面中第一次用书包表达式对以xml文件名为名称的书包取值时,系统会自动引入该