PHP写XML方法很多,这里主要介绍一下DOMDocument的用法,跟 JS大体上相同,其实非常简单。
共分四个文件,分别是创建、增加、删除、修改四个功能,变量都是写死的,改一改用$_POST方式接收就可以用了
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
|
<?php
$xmlpatch
=
'index.xml'
;
$_id
=
'1'
;
$_title
=
'title1'
;
$_content
=
'content1'
;
$_author
=
'author1'
;
$_sendtime
=
'time1'
;
$_htmlpatch
=
'1.html'
;
$doc
=
new
DOMDocument(
'1.0'
,
'utf-8'
);
$doc
-> formatOutput = true;
$root
=
$doc
-> createElement(
'root'
);
//新建节点
$index
=
$doc
-> createElement(
'index'
);
//新建节点
$url
=
$doc
-> createAttribute(
'url'
);
//新建属性
$patch
=
$doc
-> createTextNode(
$_htmlpatch
);
//新建TEXT值
$url
-> appendChild(
$patch
);
//将$patch文本设为$url属性的值
$id
=
$doc
-> createAttribute(
'id'
);
$newsid
=
$doc
-> createTextNode(
$_id
);
$id
-> appendChild(
$newsid
);
$title
=
$doc
-> createAttribute(
'title'
);
$newstitle
=
$doc
-> createTextNode(
$_title
);
$title
-> appendChild(
$newstitle
);
$content
=
$doc
-> createTextNode(
$_content
);
//节点值
$author
=
$doc
-> createAttribute(
'author'
);
$newsauthor
=
$doc
-> createTextNode(
$_author
);
$author
-> appendChild(
$newsauthor
);
$sendtime
=
$doc
-> createAttribute(
'time'
);
$newssendtime
=
$doc
-> createTextNode(
$_sendtime
);
$sendtime
-> appendChild(
$newssendtime
);
$index
-> appendChild(
$id
);
//将$id设为index节点的属性,以下类同
$index
-> appendChild(
$title
);
$index
-> appendChild(
$content
);
$index
-> appendChild(
$url
);
$index
-> appendChild(
$author
);
$index
-> appendChild(
$sendtime
);
$root
-> appendChild(
$index
);
//设置index为root字节点
$doc
-> appendChild(
$root
);
//设置root为跟节点
$doc
-> save(
$xmlpatch
);
//保存文件
echo
$xmlpatch
.
' has create success'
;
?>
|
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
<p>
//add.php 增加功能(跟index.php文件差不多,主要就是加个load载入跟 $root = $doc -> do//cumentElement获得跟节点
</p>
<p>
$xmlpatch
=
'index.xml'
;
$_id
=
'2'
;
$_title
=
'title2'
;
$_content
=
'content2'
;
$_author
=
'author2'
;
$_sendtime
=
'time2'
;
$_htmlpatch
=
'2.html'
;
</p>
<p>
$doc
=
new
DOMDocument();
$doc
-> formatOutput = true;
if
(
$doc
-> load(
$xmlpatch
)) {
$root
=
$doc
-> documentElement;
//获得根节点(root)
$index
=
$doc
-> createElement(
'index'
);
</p>
<p>
$url
=
$doc
-> createAttribute(
'url'
);
$patch
=
$doc
-> createTextNode(
$_htmlpatch
);
$url
-> appendChild(
$patch
);
</p>
<p>
$id
=
$doc
-> createAttribute(
'id'
);
$newsid
=
$doc
-> createTextNode(
$_id
);
$id
-> appendChild(
$newsid
);
</p>
<p>
$title
=
$doc
-> createAttribute(
'title'
);
$newstitle
=
$doc
-> createTextNode(
$_title
);
$title
-> appendChild(
$newstitle
);
</p>
<p>
$content
=
$doc
-> createTextNode(
$_content
);
</p>
<p>
$author
=
$doc
-> createAttribute(
'author'
);
$newsauthor
=
$doc
-> createTextNode(
$_author
);
$author
-> appendChild(
$newsauthor
);
</p>
<p>
$sendtime
=
$doc
-> createAttribute(
'time'
);
$newssendtime
=
$doc
-> createTextNode(
$_sendtime
);
$sendtime
-> appendChild(
$newssendtime
);
</p>
<p>
$index
-> appendChild(
$id
);
$index
-> appendChild(
$title
);
$index
-> appendChild(
$content
);
$index
-> appendChild(
$url
);
$index
-> appendChild(
$author
);
$index
-> appendChild(
$sendtime
);
</p>
<p>
$root
-> appendChild(
$index
);
</p>
<p>
$doc
-> save(
$xmlpatch
);
</p>
<p>
echo
$_id
.
' has been added in '
.
$xmlpatch
;
</p>
<p>
}
else
{
echo
'xml file loaded error!'
;
}
</p>
<p>
}
</p>
|
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
|
//edit.php 修改功能(这里只修改title属性值 跟节点值)
<?php
$xmlpatch
=
'index.xml'
;
$_id
=
'2'
;
$_title
=
'has been changed'
;
$_content
=
'has been changed'
;
$doc
=
new
DOMDocument();
$doc
-> formatOutput = true;
if
(
$doc
-> load(
$xmlpatch
)) {
$root
=
$doc
-> documentElement;
$elm
=
$root
-> getElementsByTagName(
'index'
);
$checkexist
= 0;
foreach
(
$elm
as
$new
) {
if
(
$new
-> getAttribute(
'id'
) ==
$_id
) {
$new
-> setAttribute(
'title'
,
$_title
);
$new
-> nodeValue =
$_content
;
//修改节点值,真是太意外了,没想到跟JS一样直接能赋值...
//$new -> removeChild($new -> nodevalue);
$checkexist
= 1;
}
}
if
(
$checkexist
== 0) {
echo
$_id
.
' is not found in '
.
$xmlpatch
;
}
else
{
$doc
-> save(
$xmlpatch
);
echo
$_id
.
' has been changed'
;
}
}
else
{
echo
'xml file loaded error!'
;
}
?>
|
1
|
|
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
|
//del.php 删除功能
<?php
$xmlpatch
=
'index.xml'
;
$_id
=
'2'
;
$doc
=
new
DOMDocument();
$doc
-> formatOutput = true;
if
(
$doc
-> load(
$xmlpatch
)) {
$root
=
$doc
-> documentElement;
$elm
=
$root
-> getElementsByTagName(
'index'
);
foreach
(
$elm
as
$new
) {
if
(
$new
-> getAttribute(
'id'
) ==
$_id
) {
if
(
$root
-> removeChild(
$new
)) {
echo
$_id
.
' has been deleted'
;
}
else
{
echo
$_id
.
' delete failed'
;
}
}
}
$doc
-> save(
$xmlpatch
);
}
else
{
echo
'xml file loaded error!'
;
}
?>
|