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