日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

simplexml php,php的simplexml

發布時間:2025/3/21 php 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 simplexml php,php的simplexml 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要處理XML 文件,有兩種傳統的處理思路:SAX 和DOM。SAX 基于事件觸發機制,

對XML 文件進行一次掃描,完成要進行的處理;DOM 則將整個XML 文件構造為一棵DOM

樹,通過對DOM 樹的遍歷完成處理。這兩種方法各有優缺點,SAX 的處理思路相對抽象,

DOM 的處理過程相對煩瑣,都不很適合新手的入門。

PHP5 推出了一套新的XML 處理函數,即SimpleXML。名如其實,SimpleXML 本身小

巧精干,只提供了少量的幾個方法函數,但用它處理起XML 文件功能卻非常強大,操作也

非常的簡單。

首先,它提供有簡單的函數可以從XML 文檔、字符串、或DOM 對象上直接構造出

SimpleXMLElement 對象;其次,SimpleXMLElement 提供有簡單的方法可以進行屬性、子節

點、和XPath 的操作;然而,SimpleXML 最簡單的地方是,它提供有使用標準對象的屬性和

對象迭代器進行節點操作的方法,這一處理思路使得用PHP 對XML 文檔的處理得到了極大

的簡化。

2 SimpleXML 入門示例

下面我們通過一些小的代碼片段,稍微了解一下SimpleXML 的強大和簡潔。為舉例方便,

我們使用一個Messages.xml 文件,里面包含這樣一段XML 代碼:

Messages.xml

復制代碼代碼如下:

This is Title

Here is Content

2008-03-20 21:50:23

reply 1

reply 2

這是一篇保存有留言信息的XML 文檔,每條信息包括屬性id,子節點title、content、time

以及若干條對于它的回復信息,每條回復包括屬性id 及回復的內容。

用SimpleXML 處理并輸出此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.'
';

}

(8)遍歷留言1 所有的子節點

代碼片斷

//children 方法得到所有子節點

foreach ($xml->msg->children() as $field){

echo $field.'
';

}

(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 函數包

可以非常簡單地實現如下:

代碼如下:

復制代碼代碼如下:

//cong work atWed Mar 20 19:59:04 CST 2008

//將數據從MySQL 數據庫中保存到XML 文件中

//可以使用如下幾種方式構造初始的SimpleXMLElement 對象

//1、從DOM 對象中構造

//$dom = new DOMDocument();

//$dom->loadXML("");

//$xml = simplexml_import_dom($dom);

//2、從僅包含根標簽的xml 文件中構造

//$xml = simplexml_load_file('messages.xml');

//3、直接寫根標簽字符串構造

//$xml = simplexml_load_string("");

//4、使用SimpleXMLElement 類的構造器構造

$xml = new SimpleXMLElement('');

//連接數據庫

mysql_connect('localhost','root','root');

mysql_select_db('test');

mysql_query('set names utf8');

//查詢消息

$rs = mysql_query("select * from messages");

$i = 0; //用做多條消息的數組索引下標

while($row = mysql_fetch_assoc($rs)){

$xml->message[$i] = ''; //… … … … … … … … … … … … ①

$xml->message[$i]['id'] = $row['id'];

$xml->message[$i]->title = $row['title'];

$xml->message[$i]->content = $row['content'];

$xml->message[$i]->time = $row['time'];

//根據消息id 查詢它相關的回復信息

$rsReply = mysql_query("select * from replies where mid={$row['id']}");

$j = 0; //用于做多條回復的索引下標

while($rowReply = mysql_fetch_assoc($rsReply)){

$xml->message[$i]->reply[$j] = $rowReply['reply'];

$xml->message[$i]->reply[$j]['id'] = $rowReply['id'];

$j++;

}

$i++;

}

$xml->asXML('messages.xml');

?>

上述代碼唯一值得一提的地方就是標志①的那行。當我們要向一個SimpleXML 對象中新

增一個節點或屬性時,必須保證它的父節點是存在的,否則會報一個致命錯誤,提示信息是:

Objects used as arrays in post/pre increment/decrement must return values by reference。希望大家

不要被這段不知所云的提示所迷惑。相信讀者能通過對上述代碼的了解,對等地寫出一個從XML文件到MySQL 的代碼出來。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的simplexml php,php的simplexml的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。