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