php中DOMDocument简单用法(XML创建、添加、删除、修改)

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!' ;
}
 
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值