PHP与XML技术
先把概念粘过来:
先来个基本模板:
<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<?xml-stylesheet type="text/css" href="Book.css"?>
<!-- 下面的标签<计算机图书>就是这个XML文档的根目录 -->
<计算机图书>
<PHP>
<书名>PHPXXX</书名>
<价格 单位="元/本">23.3</价格>
<出版时间>xxx-xxx-xxx</出版时间>
</PHP>
</计算机图书>
接下来解释下细节:
1.XML声明:
只能出现一次,必须在第一行。
如<?xml version="1.0" encoding="gb2312" standalone="yes"?>
2.处理指令(如何处理XML文档的指令)
格式<?处理指令名 处理执行信息?>
<?xml-stylesheet type="text/css" href="Book.css"?>
3.注释
XML注释和HTML注释一样<!-- XXXXXX -->
注意问题:
4.XML元素
元素通常必不可少,是文档内容的基本单元。
<标签>数据内容</标签>
5.XML属性
XML属性是XML元素中的内容,是可选的。
<标签 属性名=”属性值” 属性名=”属性值”>内容</标签>
6.
CDATA标记
XML中特殊字符需要实体引用(也就是以为某些字符会转意,所以表示的时候要换个姿势)
如果多的话可以直接采取CDATA来表示:
<![CDATA[
......
]]>
例子:
<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<exam>
<实体引用>这里必须使用引用"$lt;"、"$gt;"、"$amp;"</实体引用>
<CDATA标签>
<![CDATA[
这里可以正常输出"<"、">"、"$"。
]]>
</CDATA标签>
</exam>
7.XML命名空间
<标签名称 xmlns:前缀名称=”URL”>
<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<TUSHU xmlns:frn="http://www.xxx.xxx/xxx">
<frn:English>
<frn:MINGZI>XXX</frn:MINGZI>
<frn:JIAGE>XXX</frn:JIAGE>
</frn:English>
</TUSHU>
PHP与XML:
1.PHP中创建文档
<?php header('Content-type:text/xml'); echo '<?xml version="1.0" encoding="gb2312"?>'; echo '<BOOK>'; echo '<PHP>'; echo '<NAME>XXX</NAME>'; echo '<DATA>XXX-XXX-XXX</DATA>'; echo '</PHP>'; echo '</BOOK>';?>
2.SimpleXML
PHP对XML格式的文档操作由很多方法。如XML语法解析函数、DOMXML函数和SimpleXML函数等(PHP5新加入的SimpleXML)。
2.1创建SimpleXML对象
有三个姿势:
(1)
Simplexml_load_file()函数,将制定的文件解析到内存中。
<?php header('Content-type:text/html;charset=utf-8'); $xml_1 = simplexml_load_file('1.xml'); print_r($xml_1);?>
(2)
Simplexml_load_string()函数,将创建的字符串解析到内存中。
<?php header('Content-type:text/html;charset=utf-8');$str=<<<XML<?xml version="1.0" encoding="gb2312"?><BOOK> <PHP> <NAME>XXX</NAME> <DATA>XXX-XXX-XXX</DATA> </PHP></BOOK>XML; $xml_2 = simplexml_load_string($str); print_r($xml_2);?>
(3)
Simplexml_load_date()函数,将一个使用DOM函数创建的DomDocument对象导入到内存中。
<?php header('Content-type:text/html;charset=utf-8');$str=<<<XML<?xml version="1.0" encoding="gb2312"?><BOOK> <PHP> <NAME>XXX</NAME> <DATA>XXX-XXX-XXX</DATA> </PHP></BOOK>XML; $dom = new domDocument(); $dom -> loadXML($str); $xml_3 = simplexml_import_dom($dom); print_r($xml_3);?>
2.2遍历所有子元素
<?php header('Content-type:text/html;charset=utf-8'); $str=<<<XML<?xml version="1.0" encoding="gb2312"?><BOOK> <PHP> <NAME>XXX</NAME> <DATA>XXX-XXX-XXX</DATA> </PHP> <XXX> <NAME>XXX</NAME> <DATA>XXX-XXX-XXX</DATA> </XXX></BOOK>XML; $xml = simplexml_load_string($str); print_r($xml); echo "<br><br><br>"; foreach($xml->children() as $layer_one){ print_r($layer_one); echo "<br>"; } echo "<br><br>"; foreach($xml->children() as $layer_one){ foreach($layer_one->children() as $layer_two) { print_r($layer_two); echo "<br>"; } }?>
2.3遍历所有属性
<?php header('Content-type:text/html;charset=utf-8'); $str=<<<XML<?xml version="1.0" encoding="gb2312"?><object name='commdoity'> <book type="computerbook"> <bookname name="XXX"/> </book> <book type="historybook"> <bookname name="CCC"/> </book></object>XML; $xml = simplexml_load_string($str); foreach($xml->children() as $layer_one){ foreach($layer_one->attributes() as $name => $vl){ echo $name."::".$vl."<br>"; } foreach($layer_one->children() as $layer_two){ foreach($layer_two->attributes() as $name => $vl){ echo $name."::".$vl."<br>"; } } echo '<br><br>'; }?>
2.4访问特定节点和属性
<?php header('Content-type:text/html;charset=utf-8'); $str=<<<XML<?xml version="1.0" encoding="gb2312"?><object name='commdoity'> <book> <bookname>AAAA</bookname> </book> <book> <bookname name="BBBB"/> </book></object>XML; $xml = simplexml_load_string($str); echo $xml['name'].'<br>'; echo $xml->book[0]->bookname.'<br>'; echo $xml->book[1]->bookname['name'].'<br>';?>
后面还有 修改XML数据,保存XML文档,动态创建XML文档 这些都很好理解,因为时间原因就不一个一个的全都写一遍了。直接把书上的例子粘过来把。非常简单。用的时候直接看眼就行了。
2.5修改XML数据
2.6保存XML文档
2.7动态创建XML