首页 > 编程 > PHP > 正文

php操作xml

2020-03-22 17:25:33
字体:
来源:转载
供稿:网友
要操作的数据
复制代码 代码如下:
?xml version="1.0"?
books
book name="JavaScript: The Defiitive Guide" publisher="O'Reilly Media, Inc."
author David Flanagan /author
/book
book name="PHP anf html' target='_blank'>MySQL Web Development" publisher="Perason Education"
author Luke Welling /author
author Laura Thomson /author
/book
book name="HTTP: The Defiitive Guide" publisher="O'Reilly Media, Inc."
author David Courley /author
author Brian Totty /author
/book
/books
XML几个基本概念
1、 节点:节点也就是很多程序语言中处理XML时的Node,节点是一个比较宽泛的概念,在XML中元素,属性,名字空间,注释,文本内容,处理指令,还有整个文档都属于节点,也就是说XML文档中每个独立的一小部分都是节点, books /books 是, ?xml version=”1.0”? 也是,name=”XXXX”也是, author /author 标签是,甚至作者的名字David Flanagan都是一个文本节点。
2、元素:很多程序语言都有对XML处理,节点是一个很宽泛的概念,因为要统一API,对节点不会有过多方法,而元素也就是Element是节点的一个子集,简单讲就是 xxx /xxx 这样的标签才算,一般会有很多针对元素的操作方法。
3、属性:这个比较好理解,在 里面的类似XX=”OO”等东西都是属性节点
4、转义字符:和HTML等类似,xml也有语言占用的符号,想使用的这些特殊字符的时候需要转义

DOMDocument对象
我使用的是DOMDocument对象来操作xml,感觉用起来比simpleXml科学一些,当然第一天使用php,纯属个人感觉。DOMDocument有几个常用的属性和方法。


加载xml
复制代码 代码如下:
$path=$_SERVER["DOCUMENT_ROOT"].'/books.xml';
$books=new DOMDocument();
$books- load($path);
读取/遍历节点与属性
复制代码 代码如下:
$bookElements=$books- getElementsByTagName('book'); foreach($bookElements as $book){
foreach ($book- attributes as $attr) {
echo strtoupper($attr- nodeName).' —— '.$attr- nodeValue.' br/
}
echo "AUTHOR: ";
foreach ($book- getElementsByTagName('author') as $author) {
echo $author- nodeValue.'
}
echo ' br/ br/
}



当然对于很多属性,只想读一个,可以通过item(index)方法按索引读取
复制代码 代码如下:
echo $book- attributes- item(1)- nodeValue;

还可以通过强大的xpath查询
复制代码 代码如下:
还可以通过强大的xpath查询
修改属性/节点
复制代码 代码如下:
foreach($bookElements as $book){
foreach ($book- attributes as $attr) {
#$book- setAttribute($attr- nodeName,strtoupper($attr- nodeValue));
$attr- nodeValue=strtoupper($attr- nodeValue);
}
echo "AUTHOR: ";
foreach ($book- getElementsByTagName('author') as $author) {
$author- nodeValue=strtoupper($author- nodeValue);
} }
$books- save($path);


对属性修改可以直接访问其nodeValue改动,也可以使用setAttribute方法,改动完了别忘了使用save保存。
复制代码 代码如下:
$book- setAttribute($attr- nodeName,strtoupper($attr- nodeValue));
$attr- nodeValue=strtoupper($attr- nodeValue);
添加元素/属性
复制代码 代码如下:
$newBook=$books- createElement('book'); #创建新元素
$newBook- setAttribute('name','PHP Objects, Patterns, and Practice');#创建新属性,方法一 $publisher=$books- createAttribute('publisher');#创建新属性,方法二
$publisher- nodeValue='Apress L.P';
$newBook- appendChild($publisher); #把属性添加到元素上 $author=$books- createElement('author');#创建子元素
$author- nodeValue='Matt Zandstra';
$newBook- appendChild($author);#把子元素添加到父元素上 $books- documentElement- appendChild($newBook);#添加整个节点
$books- save($path);
删除属性/节点
复制代码 代码如下:
$first=$bookElements- item(0);
$first- removeAttribute('publisher'); $second=$bookElements- item(1);
$second- parentNode- removeChild($second); $books- save($path);

初学php文章肯定有很多谬误,希望大家批评指正,共同进步。PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表