- XML是什么?
XML(eXtensible Markup Languge)即扩展性标记语言,类似于HTML,允许用户自定义自己的标签。
2.XML可以干什么?
XML用于存储数据,即将一种格式的数据存储到XML文档中,然后对这个XML文档进行解析,最后以另一种方式输出数据。
XML的用途一般有:
结构化数据,如邮件地址薄,系统配置文件
标准交换数据,用于多个平台或者应用系统之间交换数据
创建新的标记语言,用于实现更多的功能,比如RSS(简易信息聚合)
3.XML的语法格式
下面是一个简单的xml文件,注意文件保存的时候编码格式应该选择utf-8
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml-stylesheet type="text/css"?> <计算机图书 name="book"> <PHP type="computer_book"> <bookname>开发典型模块大全</bookname> <price unit="dollar each">79.00</price> <publishdate>2008-09-10</publishdate> </PHP> <PHP type="computer_book"> <bookname>Java</bookname> <price unit="dollar each">79.00</price> <publishdate>2008-09-10</publishdate> </PHP> <PHP type="computer_book"> <bookname>Java</bookname> <price unit="dollar each">79.00</price> <publishdate>2008-09-10</publishdate> </PHP> </计算机图书>
第一行为XML声明,而且必须出现在第一行,而且第一行不能是空行,说明XML的版本,编码等信息。
XML的注释 <!-- -->
XML的元素 <标签>数据内容</标签>
如果标签内容含有>< &等特殊字符的话,有两种解决方式
第一种使用实体参考(
< <
> $gt;
‘ '
" "
& & 注意,千万不要忘了末尾的分号
第二种 适用于特殊字符特别多的情况
<![CDATA[
特殊字符 这里可以正常输出< > ‘ " 等特殊字符
]]>
4.如何解析XML文件?
可以使用PHP5的SimpleXML函数
<?php header("Content-Type:text/html;charset=UTF-8"); $xml = simplexml_load_file("book.xml");/*通过载入xml文件创建SimpleXML对象 即根节点对象*/ //print_r($xml); foreach($xml->children() as $layer_one){ print_r($layer_one);/* $layer_one其实是一个数组,数组元素是该层的节点对象 这里是三个PHP节点 */ echo "<br>"; foreach($layer_one->children() as $layer_two){ print_r($layer_two); echo "<br>"; } }
=============================================
遍历节点的所有属性
header("Content-Type:text/html;charset=UTF-8"); $xml = simplexml_load_file("book.xml"); //print_r($xml); foreach($xml->children() as $layer_one){ foreach($layer_one->attributes() as $name=>$value){ echo "$name ======> $value"; echo "<br>"; foreach($layer_one->children() as $layer_two){ foreach($layer_two->attributes() as $name1=>$value1){ echo "$name1 =======>$value1"; } } } }
运行结果
==========================================
访问特定节点的元素和属性
<?php header("Content-Type:text/html;charset=UTF-8"); $xml = simplexml_load_file("book.xml"); echo $xml["name"];/*访问根节点属性name的值*/ $layer_one = $xml->children(); echo $layer_one[0]->bookname."<br>"; echo $layer_one[0]->price."<br>"; /*得到子节点price的值*/ echo $layer_one[0]->price["unit"]."<br>";/*得到子节点price unit属性的值*/ echo $layer_one[0]->publishdate."<br>"; echo count($layer_one); /* 3 */
========================================================
修改XML文件的内容
<?php header("Content-Type:text/html;charset=UTF-8"); $xml = simplexml_load_file("book.xml"); $layer_one = $xml->children(); $layer_one[0]->bookname = "PHP高手之路"; //print_r($layer_one); $modify = $xml->asXML(); /*格式为XML对象*/ file_put_contents("book.xml",$modify);/*将修改写入到XML文件中*/ $str = file_get_contents("book.xml"); echo $str;
====================================================
此外我们还可以使用DOM类库来遍历XML文档,DOM是通过树状结构模式来遍历XML文档。使用DOM变量文档
的好处是不需要标记就可以显示所有内容,但是缺点是十分消耗内存。
那么如何解析一个XML文档呢?
<?php header("Content-Type:text/html;charset=UTF-8"); $dom = new DOMDocument; /*初始化DOMDocument对象*/ $dom->load("book.xml");/*载入book.xml 注意,不要使用loadXML()*/ $names = $dom->getElementsByTagName("bookname");/*根据标签名获得DomNode列表*/ foreach($names as $name){ /*遍历DomNode*/ print $name->nodeValue."<br>"; }