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