xml php 解析

世有因果知因求果發表於2017-03-25

JSON作為資料交換可以說已經成為了一種事實上的標準,但是前幾年和它對應的xml雖然說用的越來越少,但是我感覺還是有他可以應用的地方。

json更偏重於程式設計師來使用和解讀,而xml則更適合使用者來使用和解讀。因此,存在這樣的場景:使用者使用xml來構造資料,通過一定的轉換工具

轉成我們需要的資料格式,同時如果需要的話則可以轉成對應的json.

在php中一種非常好用的xml解析模式: simpleXML

比如:

<?xml version='1.0' standalone='yes'?> 
<Messages> 
<msg id='1'> 
<title>This is Title</title> 
<content>Here is Content</content> 
<time>2008-03-20 21:50:23</time> 
<reply id='11'>reply 1</reply> 
<reply id='12'>reply 2</reply> 
</msg> 
</Messages> 

上面這段xml程式碼,可以非常簡單地實現如下:

(1) 構造SimpleXMLElement 物件 

程式碼片斷 
$xml = simplexml_load_file('Messages.xml'); 
如果這段xml 已經被讀入到一個字串$messages 中,則可以使用如下語句: 
程式碼片斷 
$xml = simplexml_load_string('Messages.xml'); 
(2)輸出留言1 的標題 
程式碼片斷 
//可以使用屬性的方式訪問子節點,通過節點的標籤名可直接得到節點的內容 
echo $xml->msg->title; 
(3)輸出留言1 的第一條回覆資訊 
程式碼片斷 
//同級別的多個同名節點自動成為陣列,可以通過索引下標訪問其內容 
echo $xml->msg->reply[0]; 
(4)輸出留言的id 
程式碼片斷 
//節點的屬性與值被封裝成為關聯陣列的鍵與值 
echo $xml->msg['id']; 
(5)輸出第二條回覆的id 
程式碼片斷 
//成為二維陣列,第一維表示節點,第二維表示屬性 
echo $xml->msg->reply[1][ 'id']; 
(6)依次輸出所有回覆的id 
程式碼片斷 
//使用foreach 對同名節點進行遍歷 
foreach ($xml->msg->reply as $reply){ 
echo $reply['id']; 

(7)使用XPath 檢索所有的回覆資訊 
程式碼片斷 
//xpath 方法直接檢索定位(//表示任意深度) 
foreach ($xml->xpath('//reply') as $reply){ 
echo $reply.'<br>'; 


(8)遍歷留言1 所有的子節點 
程式碼片斷 
//children 方法得到所有子節點 
foreach ($xml->msg->children() as $field){ 
echo $field.'<br>'; 

(9)重新設定留言1 的釋出時間 
程式碼片斷 
//直接設定屬性 
$xml->msg->time = '2008-03-21 00:53:12'; 
(10)設定回覆2 的id 屬性 
程式碼片斷 
//設定管理陣列的值 
$xml->msg->reply[1]['id'] = '222'; 
(11)新增一個描述訊息作者的欄位 
程式碼片斷 
//直接設定屬性 
$xml->msg->author = 'zhangsan'; 
(12)將訊息的作者儲存為屬性 
程式碼片斷 
//設定關聯陣列的key 
$xml->msg['author'] = 'zhangsan'; 
(13)重新儲存物件到檔案 
程式碼片斷 
//儲存 
$xml->asXML('MessagesNew.xml'); 
應該可以看出SimpleXML 有多簡單了吧! 
3 例項:XML 檔案與資料庫之間進行資料互動 
下面提供一個相對完整的例項,將留言資訊從MySQL 資料庫中查詢出來,儲存成為一 
個如上例所示的XML 檔案。留言資訊和回覆資訊獨立儲存在兩張表中,使用MySQL 函式包 

參考:

http://www.cnblogs.com/likwo/archive/2011/08/24/2151836.html