PHP通过DOMDocument操作解析xml

1.xml概念
 可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言
2.xml和html的区别
a.可扩展性:xml可以自己定义新的标记,而html都是已规定的标记
b.数据和显示:xml数据和显示是分离的,html是整合在一起
c.侧重点:xml用来描述数据结构,html用来如何表现数据(各种规定的样式和标签)
d.语法:xml严格要求嵌套和配对,html不要求


3.xml主要是为了传输数据,而不是为了显示数据
4.语法规范:

a.任何起始标签都必须有一个结束标签,即配对闭合
<root></root>
b.标签不能互相嵌套
错误:<root><a></root></a> 
正确:<root><a></a></root>
c.属性必须有值,且属性值必须用引号包含起来
如:<root><a attr='wyz'></a></root>
d.特殊字符要用实体符号来替换
如:> 用 &gt;‘’用&quot

注:如果有大段文本包含特殊字符,可以用CDATA(微信开发xml就有这个东东)来存放

XML文件

<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book>
		<name>php高级编程</name>
		<price>12</price>
	</book>
	<book>
		<name>php低级编程</name>
		<price>11</price>
	</book>
</books>

DOM解析XML

$dom = new DOMDocument('1.0', 'utf-8');		//创建DOM解析对象
$dom->load('book.xml');						//载入解析文档文件

$books = $dom->getElementsByTagName('book');	//得到所有书本的DOMNodeList对象列表

//获取节点内容
echo '有几本书:'.$books->length."<br/>";
foreach ($books as $book)
{
	
	$bookname = $book->getElementsByTagName('name');	//得到书本的名称DOMNodeList对象列表
	$bookprice = $book->childNodes->item(3);			//得到书本的价格DOMElement对象,childNodes包含换行节点

	echo 'bookname:'.$bookname->item(0)->nodeValue."<br/>";	
	echo 'bookprice:'.$bookprice->nodeValue.'<br/>';
// 	$bookprice->nodeValue = 15; //修改节点内容
}

//添加节点内容
$cbook = $dom->createElement('book');
$cbookname = $dom->createElement('name');
$cbookname_text = $dom->createTextNode('php中级编程');		

$cbookname->appendChild($cbookname_text);	
$cbook->appendChild($cbookname);
$dom->getElementsByTagName('books')->item(0)->appendChild($cbook);

//删除节点内容
$book3 = $dom->getElementsByTagName('book')->item(2);	//获取对象DOMElement对象
$book3->parentNode->removeChild($book3);				//根据父亲节点对象移除获取的子DOMElement对象

$dom->save('book.xml');

注:php还可以通过SimpleXMLElement和DOMXPath解析。XPath可以快速读取节点文本数据,大数据读取可以考虑。

你可能感兴趣的:(PHP通过DOMDocument操作解析xml)