最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php下使用SimpleXML 處理XML 文件

 更新時間:2010年02月27日 12:42:34   作者:  
要處理XML 文件,有兩種傳統(tǒng)的處理思路:SAX 和DOM。
1 SimpleXML 簡介
要處理XML 文件,有兩種傳統(tǒng)的處理思路:SAX 和DOM。SAX 基于事件觸發(fā)機制,
對XML 文件進行一次掃描,完成要進行的處理;DOM 則將整個XML 文件構(gòu)造為一棵DOM
樹,通過對DOM 樹的遍歷完成處理。這兩種方法各有優(yōu)缺點,SAX 的處理思路相對抽象,
DOM 的處理過程相對煩瑣,都不很適合新手的入門。
PHP5 推出了一套新的XML 處理函數(shù),即SimpleXML。名如其實,SimpleXML 本身小
巧精干,只提供了少量的幾個方法函數(shù),但用它處理起XML 文件功能卻非常強大,操作也
非常的簡單。
首先,它提供有簡單的函數(shù)可以從XML 文檔、字符串、或DOM 對象上直接構(gòu)造出
SimpleXMLElement 對象;其次,SimpleXMLElement 提供有簡單的方法可以進行屬性、子節(jié)
點、和XPath 的操作;然而,SimpleXML 最簡單的地方是,它提供有使用標準對象的屬性和
對象迭代器進行節(jié)點操作的方法,這一處理思路使得用PHP 對XML 文檔的處理得到了極大
的簡化。
2 SimpleXML 入門示例
下面我們通過一些小的代碼片段,稍微了解一下SimpleXML 的強大和簡潔。為舉例方便,
我們使用一個Messages.xml 文件,里面包含這樣一段XML 代碼:
Messages.xml
復(fù)制代碼 代碼如下:

<?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 文檔,每條信息包括屬性id,子節(jié)點title、content、time
以及若干條對于它的回復(fù)信息,每條回復(fù)包括屬性id 及回復(fù)的內(nèi)容。
用SimpleXML 處理并輸出此XML 文檔內(nèi)容的過程以及方法如下。
(1) 構(gòu)造SimpleXMLElement 對象

代碼片斷
$xml = simplexml_load_file('Messages.xml');
如果這段xml 已經(jīng)被讀入到一個字符串$messages 中,則可以使用如下語句:
代碼片斷
$xml = simplexml_load_string('Messages.xml');
(2)輸出留言1 的標題
代碼片斷
//可以使用屬性的方式訪問子節(jié)點,通過節(jié)點的標簽名可直接得到節(jié)點的內(nèi)容
echo $xml->msg->title;
(3)輸出留言1 的第一條回復(fù)信息
代碼片斷
//同級別的多個同名節(jié)點自動成為數(shù)組,可以通過索引下標訪問其內(nèi)容
echo $xml->msg->reply[0];
(4)輸出留言的id
代碼片斷
//節(jié)點的屬性與值被封裝成為關(guān)聯(lián)數(shù)組的鍵與值
echo $xml->msg['id'];
(5)輸出第二條回復(fù)的id
代碼片斷
//成為二維數(shù)組,第一維表示節(jié)點,第二維表示屬性
echo $xml->msg->reply[1][ 'id'];
(6)依次輸出所有回復(fù)的id
代碼片斷
//使用foreach 對同名節(jié)點進行遍歷
foreach ($xml->msg->reply as $reply){
echo $reply['id'];
}
(7)使用XPath 檢索所有的回復(fù)信息
代碼片斷
//xpath 方法直接檢索定位(//表示任意深度)
foreach ($xml->xpath('//reply') as $reply){
echo $reply.'<br>';
}

(8)遍歷留言1 所有的子節(jié)點
代碼片斷
//children 方法得到所有子節(jié)點
foreach ($xml->msg->children() as $field){
echo $field.'<br>';
}
(9)重新設(shè)置留言1 的發(fā)布時間
代碼片斷
//直接設(shè)置屬性
$xml->msg->time = '2008-03-21 00:53:12';
(10)設(shè)置回復(fù)2 的id 屬性
代碼片斷
//設(shè)置管理數(shù)組的值
$xml->msg->reply[1]['id'] = '222';
(11)新增一個描述消息作者的字段
代碼片斷
//直接設(shè)置屬性
$xml->msg->author = 'zhangsan';
(12)將消息的作者保存為屬性
代碼片斷
//設(shè)置關(guān)聯(lián)數(shù)組的key
$xml->msg['author'] = 'zhangsan';
(13)重新保存對象到文件
代碼片斷
//保存
$xml->asXML('MessagesNew.xml');
應(yīng)該可以看出SimpleXML 有多簡單了吧!
3 實例:XML 文件與數(shù)據(jù)庫之間進行數(shù)據(jù)交互
下面提供一個相對完整的實例,將留言信息從MySQL 數(shù)據(jù)庫中查詢出來,保存成為一
個如上例所示的XML 文件。留言信息和回復(fù)信息獨立保存在兩張表中,使用MySQL 函數(shù)包
可以非常簡單地實現(xiàn)如下:

代碼如下:
復(fù)制代碼 代碼如下:

<?php
//cong work atWed Mar 20 19:59:04 CST 2008
//將數(shù)據(jù)從MySQL 數(shù)據(jù)庫中保存到XML 文件中
//可以使用如下幾種方式構(gòu)造初始的SimpleXMLElement 對象
//1、從DOM 對象中構(gòu)造
//$dom = new DOMDocument();
//$dom->loadXML("<rows></rows>");
//$xml = simplexml_import_dom($dom);
//2、從僅包含根標簽的xml 文件中構(gòu)造
//$xml = simplexml_load_file('messages.xml');
//3、直接寫根標簽字符串構(gòu)造
//$xml = simplexml_load_string("<Messages></Messages>");
//4、使用SimpleXMLElement 類的構(gòu)造器構(gòu)造
$xml = new SimpleXMLElement('<Messages></Messages>');
//連接數(shù)據(jù)庫
mysql_connect('localhost','root','root');
mysql_select_db('test');
mysql_query('set names utf8');
//查詢消息
$rs = mysql_query("select * from messages");
$i = 0; //用做多條消息的數(shù)組索引下標
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'];
//根據(jù)消息id 查詢它相關(guān)的回復(fù)信息
$rsReply = mysql_query("select * from replies where mid={$row['id']}");
$j = 0; //用于做多條回復(fù)的索引下標
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 對象中新
增一個節(jié)點或?qū)傩詴r,必須保證它的父節(jié)點是存在的,否則會報一個致命錯誤,提示信息是:
Objects used as arrays in post/pre increment/decrement must return values by reference。希望大家

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

相關(guān)文章

  • php bootstrap實現(xiàn)簡單登錄

    php bootstrap實現(xiàn)簡單登錄

    這篇文章主要為大家詳細介紹了php bootstrap實現(xiàn)簡單登錄的具體方法,感興趣的小伙伴們可以參考一下
    2016-03-03
  • mysql 中InnoDB和MyISAM的區(qū)別分析小結(jié)

    mysql 中InnoDB和MyISAM的區(qū)別分析小結(jié)

    InnoDB和MyISAM是在使用MySQL最常用的兩個表類型,各有優(yōu)缺點,視具體應(yīng)用而定。基本的差別為:MyISAM類型不支持事務(wù)處理等高級處理,而InnoDB類型支持。MyISAM類型的表強調(diào)的是性能,其執(zhí)行數(shù)度比InnoDB類型更快,但是不提供事務(wù)支持,而InnoDB提供事務(wù)支持已經(jīng)外部鍵等高級數(shù)據(jù)庫功能。
    2008-04-04
  • PHP+jQuery實現(xiàn)即點即改功能示例

    PHP+jQuery實現(xiàn)即點即改功能示例

    這篇文章主要介紹了PHP+jQuery實現(xiàn)即點即改功能,涉及php數(shù)組讀取、遍歷及jQuery事件響應(yīng)與動態(tài)修改頁面元素屬性相關(guān)操作技巧,需要的朋友可以參考下
    2019-02-02
  • php實現(xiàn)的三個常用加密解密功能函數(shù)示例

    php實現(xiàn)的三個常用加密解密功能函數(shù)示例

    這篇文章主要介紹了php實現(xiàn)的三個常用加密解密功能函數(shù),涉及php針對字符串的遍歷、截取、編碼轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • php 調(diào)用遠程url的六種方法小結(jié)

    php 調(diào)用遠程url的六種方法小結(jié)

    php 調(diào)用遠程url的六種方法,需要的朋友可以參考下。
    2009-11-11
  • php圖像處理函數(shù)大全(推薦收藏)

    php圖像處理函數(shù)大全(推薦收藏)

    php圖片處理代碼分享,包括縮放、剪裁、縮放、翻轉(zhuǎn)、旋轉(zhuǎn)、透明、銳化等。需要的朋友可以參考下
    2013-07-07
  • PHP反射原理與用法深入分析

    PHP反射原理與用法深入分析

    這篇文章主要介紹了PHP反射原理與用法,結(jié)合實例形式深入分析了PHP反射的概念、原理、應(yīng)用場景及相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • Laravel快速入門之composer介紹及安裝詳細圖文步驟

    Laravel快速入門之composer介紹及安裝詳細圖文步驟

    這篇文章主要介紹了Laravel快速入門之composer 介紹以及安裝詳細圖文步驟,圖文步驟講解的很清楚,有對這方面不懂的同學可以研究下
    2021-01-01
  • php計算中英文字符串長度的幾種方法

    php計算中英文字符串長度的幾種方法

    這篇文章主要給大家介紹了使用php計算中英文字符串長度的幾種方法,文中有詳細的代碼示例供大家參考,對大家的學習或工作有一定的參考價值,需要的朋友可以參考下
    2023-11-11
  • php-redis中的sort排序函數(shù)總結(jié)

    php-redis中的sort排序函數(shù)總結(jié)

    這篇文章主要介紹了php-redis中的sort排序函數(shù)總結(jié),本文講解了了按字母排序、排序取部分數(shù)據(jù)、使用外部key進行排序等排序方法,同時給出代碼實例,需要的朋友可以參考下
    2015-07-07

最新評論

鹰潭市| 庆阳市| 海淀区| 库伦旗| 九龙县| 陆川县| 邹平县| 临沂市| 龙山县| 来安县| 察隅县| 左权县| 黄冈市| 桃江县| 景谷| 安龙县| 本溪| 屯门区| 汤阴县| 重庆市| 同江市| 博湖县| 五大连池市| 荃湾区| 崇义县| 翁源县| 祥云县| 开原市| 宁化县| 城市| 龙岩市| 定日县| 基隆市| 胶南市| 四会市| 筠连县| 兴宁市| 岑巩县| 镇安县| 高陵县| 大埔区|