14.PHP_PHP与XML技术
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
總結
以上是生活随笔為你收集整理的14.PHP_PHP与XML技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 13.PHP_ThinkPHP
- 下一篇: 15.PHP_PHP与Ajax