PHP操作XML文件学习笔记

kenticny

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文件的 encodingutf-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");

//操作xml准备
$doc = new DOMDocument("1.0","utf-8");

//通过createElement方法为xml文件创建节点
//创建根节点
$school= $doc->createElement("school");
//通过appendChild方法将节点或属性添加到指定的标签下
//将根节点添加到xml文件中
$doc->appendChild($school);

//创建student节点
$student= $doc->createElement("student");
//将student节点添加到school节点下
$school->appendChild($student);

$nameinfo = array(); //对应xml文件中name标签下的内容
$sexinfo = array(); //对应xml文件中sex标签下的内容
$ageinfo = array(); //对应xml文件中age标签下的内容
$idinfo = array(); //对应xml文件中属性id的值
$i = 0; //控制变量i

while($row=mysql_fetch_array($query)){
//通过createTextNode方法为标签节点赋值或者为属性赋值
//查询数据库信息并赋值给相应的数组
$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");
//通过createAttribute为节点标签创建属性
$id = $doc->createAttribute("id");

//将name、sex、age标签添加到student标签下,并且为student标签赋属性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]);
}

//通过save方法将生成的xml文件保存
$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");

//通过getElementsByTagName方法获取到所有标签为student的标签内容,并存为数组$students
$students = $doc->getElementsByTagName("student");

//遍历$students,将每个student的信息存为$student
foreach($students as $student){
//通过getAttribute获取指定属性的值
//将id为2的student标签的name修改为kenticny
if($student->getAttribute("id")==2){
$content = $doc->getElementsByTagName("name")->item(0)->nodeValue = "Kenticny";
}
//将id为1的student标签内容删除
if($student->getAttribute("id")==1){
//通过removeChild方法移除指定的标签内容
//在移除标签内容时候要通过被移除标签的父标签进行操作,获取父标签通过parentNode进行获取
$student->parentNode->removeChild($student);
}
}
//保存修改的XML文件
$doc->save("test.xml");

注意:在对XML进行修改和删除的时候,需要注意的是,修改和删除都是要通过指定标签的属性进行定位操作,然后在删除时候注意应当使用被删除标签的父标签进行删除操作。

以上是我对于PHP通过 DOMDocument 方法操作XML文件的学习笔记。

  • 本文标题:PHP操作XML文件学习笔记
  • 本文作者:kenticny
  • 创建时间:2012-04-24 17:02:32
  • 本文链接:https://luyun.io/2012/04/24/php-operate-xml-note/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论
此页目录
PHP操作XML文件学习笔记