PHP操作XML文件学习笔记
XML文件属于标签语言,可以通过自定义标签存储数据,其主要作用也是作为存储数据。
对于XML的操作包括遍历,生成,修改,删除等其他类似的操作。PHP对于XML的操作方式很多,这次学习的是通过DOMDocument进行操作,其他的操作方法可以参考
http://www.oschina.net/code/snippet_110138_4727
1.对XML文件的遍历
通过DOMDocument对于XML文件的操作的方法:首先要实例化一个DOMDocument类的对象,然后引入要操作的XML文件。即:
1 $doc = new DOMDocument(); 2 $doc->load("test.xml");
对于XML的遍历是通过获取XML文件中的标签名称,从而获取标签中的内容的,例如XML文件内容为:
<?xml version="1.0" encoding="utf-8" ?> <school> <student> <name>张三</name> <sex>男</sex> <age>19</age> </student> <student> <name>李四</name> <sex>女</sex> <age>18</age> </student> <student> <name>王五</name> <sex>男</sex> <age>19</age> </student> </school>
现在通过PHP遍历出每个student的信息,通过 getElementsByTagName() 方法获取到指定名称的标签并存为数组,然后遍历信息:
1 $content = $doc->getElementsByTagName("student"); 2 foreach($content as $value){ 3 echo $value->nodeValue."<br />"; 4 }
注意:在遍历XML文件的时候,要注意的一个问题就是编码的问题,如果xml文件的encoding为"utf-8",那么xml文件的文件编码也必须是utf-8,可以通过文本编辑器将文件另存为和xml的encoding相同的文件编码即可。否则在遍历的时候会报错或者出现乱码。
2.生成XML文件
在生成XML文件的时候,是通过DOMDocument类中的方法来创建各个节点和节点内容的。我通过查询数据库,并将数据库中的信息生成XML文件方法如下:
1 include "database.php"; //导入连接数据库文件 2 $query = mysql_query("SELECT * FROM test"); 3 4 //操作xml准备 5 $doc = new DOMDocument("1.0","utf-8"); 6 7 //通过createElement方法为xml文件创建节点 8 //创建根节点 9 $school= $doc->createElement("school"); 10 //通过appendChild方法将节点或属性添加到指定的标签下 11 //将根节点添加到xml文件中 12 $doc->appendChild($school); 13 14 //创建student节点 15 $student= $doc->createElement("student"); 16 //将student节点添加到school节点下 17 $school->appendChild($student); 18 19 $nameinfo = array(); //对应xml文件中name标签下的内容 20 $sexinfo = array(); //对应xml文件中sex标签下的内容 21 $ageinfo = array(); //对应xml文件中age标签下的内容 22 $idinfo = array(); //对应xml文件中属性id的值 23 $i = 0; //控制变量i 24 25 while($row=mysql_fetch_array($query)){ 26 //通过createTextNode方法为标签节点赋值或者为属性赋值 27 //查询数据库信息并赋值给相应的数组 28 $nameinfo[$i] = $doc->createTextNode($row["name"]); 29 $sexinfo[$i] = $doc->createTextNode($row["sex"]); 30 $ageinfo[$i] = $doc->createTextNode($row["age"]); 31 $idinfo[$i] = $doc->createTextNode($i); 32 $i++; 33 } 34 35 for($i=0;$i<count($nameinfo);$i++){ 36 $name = $doc->createElement("name"); 37 $sex = $doc->createElement("sex"); 38 $age = $doc->createElement("age"); 39 //通过createAttribute为节点标签创建属性 40 $id = $doc->createAttribute("id"); 41 42 //将name、sex、age标签添加到student标签下,并且为student标签赋属性id 43 $student->appendChild($name); 44 $student->appendChild($sex); 45 $student->appendChild($age); 46 $student->appendChild($id); 47 48 //将从数据库中取出的值添加到对应的标签下 49 $name->appendChild($nameinfo[$i]); 50 $sex->appendChild($sexinfo[$i]); 51 $age->appendChild($ageinfo[$i]); 52 $id->appendChild($idinfo[$i]); 53 } 54 55 //通过save方法将生成的xml文件保存 56 $doc->save("test.xml");
注意:在生成XML文件的时候同样应该注意编码问题,除了XML文件编码和XML指定编码应当一致以外,在连接数据库的时候还应该注意XML指定的编码应该和数据库的编码一致,另外在生成XML文件的时候应当特别注意各级标签的从属关系。
3.XML文件的修改和删除
在对XML文件中的数据进行修改和删除的时候,首先还是应该要将操作的XML引入,方法同遍历时一样。在修改或者删除时通过标签的属性及其值进行定位,方法如下:
1 $doc= new DOMDocument(); 2 $doc->load("test.xml"); 3 4 //通过getElementsByTagName方法获取到所有标签为student的标签内容,并存为数组$students 5 $students = $doc->getElementsByTagName("student"); 6 7 //遍历$students,将每个student的信息存为$student 8 foreach($students as $student){ 9 //通过getAttribute获取指定属性的值 10 //将id为2的student标签的name修改为kenticny 11 if($student->getAttribute("id")==2){ 12 $content = $doc->getElementsByTagName("name")->item(0)->nodeValue = "Kenticny"; 13 } 14 //将id为1的student标签内容删除 15 if($student->getAttribute("id")==1){ 16 //通过removeChild方法移除指定的标签内容 17 //在移除标签内容时候要通过被移除标签的父标签进行操作,获取父标签通过parentNode进行获取 18 $student->parentNode->removeChild($student); 19 } 20 21 } 22 //保存修改的XML文件 23 $doc->save("test.xml");
注意:在对XML进行修改和删除的时候,需要注意的是,修改和删除都是要通过指定标签的属性进行定位操作,然后在删除时候注意应当使用被删除标签的父标签进行删除操作。
以上是我对于PHP通过DOMDocument方法操作XML文件的学习笔记。欢迎转载----转载请注明出处 BY 津志伊恋 2012年4月24日