欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP中開發(fā)XML應用程序之基礎篇 添加節(jié)點 刪除節(jié)點 查詢節(jié)點 查詢節(jié)

 更新時間:2010年07月09日 13:51:03   作者:  
XML(可擴展的標注語言)是一種W3C標準,主要用于Web應用程序和服務器之間實現(xiàn)容易的交互、數(shù)據(jù)的存儲與使用
一、 XML簡介

  XML(可擴展的標注語言)是一種W3C標準,主要用于Web應用程序和服務器之間實現(xiàn)容易的交互、數(shù)據(jù)的存儲與使用。

  使用XML標準編碼的數(shù)據(jù)具有能容易被人和計算機解釋的意義和結構。XML數(shù)據(jù)是平臺和應用程序獨立的。不用多說,這本身就使XML成為適合于互聯(lián)網(wǎng)的一個理想的數(shù)據(jù)交換格式(事實上,它正是因這一用途而被開發(fā)的)。最近,寬帶連接的增長及消費者對于越過任何媒體進行數(shù)據(jù)共享的應用軟件的需求意味著,XML Web服務和應用軟件正變得越來越豐富。

  XML的發(fā)明正是為了解決描述網(wǎng)上豐富的數(shù)據(jù)的組織問題;而目前為止,這一問題僅能夠通過HTML的巧妙使用得到部分地解決。

  下面是一XML文檔的實例:
程序代碼
復制代碼 代碼如下:

<?xml version="1.0"?>
<party>
 <location>My House</location>
 <time>7pm</time>
 <guest>
  <name>John Bloggs</name>
  <item>Crate of Fosters</item>
 </guest>
 <guest>
  <name>Sara Bloggs</name>
  <item>Umbrella</item>
 </guest>
 <guest>
  <name>David Fig</name>
  <item>Bombay Mix</item>
 </guest>
</party>

  如果你以前沒見過XML,那么你可以認為它看起來象HTML。HTML是一種SGML應用程序,而XML是它的一個子集。然而,其相似性還包括它們具有相似的標注分隔符。

  僅需看一下上面的XML片斷,我們就能看到,該數(shù)據(jù)是描述一個具有一些客人的聚會;其中,每一個客人相應于一項。用于描述數(shù)據(jù)的標簽名完全由作者來選擇。所有XML標準要求:數(shù)據(jù)必須是一致的并且用于描述數(shù)據(jù)的標簽為良構的。我們可以進一步用一種文檔類型聲明(DTD)或一個XML模式來強制數(shù)據(jù)的完整性。然而為簡化起見,我們在本文中將僅使用普通的XML。

  二、 XML應用程序

  剛才,我們已經(jīng)看到了如何使用XML來描述任何種類的數(shù)據(jù)。事實上,XML已經(jīng)在今天的許多Web應用程序中得到廣泛使用,下面是一些著名的應用描述:

  · XHTML-這是使用最廣泛的XML應用程序之一。它類似基于HTML的SGML-用于描述數(shù)據(jù)在網(wǎng)頁上的顯示方式。XHTML使用一DTD來確保所有的文檔遵循標準。XHTML的出現(xiàn)使Web程序員的開發(fā)稍微容易了一些;然而,一種完全兼容于CSS和XHTML標準的web瀏覽器尚未出現(xiàn)。

  · XML-RPC-遠程過程調(diào)用(RPC),應用于分布式應用程序中以調(diào)用遠程計算機上的過程。XML-RPC使用XML對關于過程調(diào)用的信息進行編碼,并且使用HTTP把它發(fā)送到接收計算機。然后,過程的返回值被再次用XML編碼并用HTTP連接發(fā)送回調(diào)用者計算機。

  · RSS-真正簡單的聚合/豐富的站點摘要,它是一種用來聚合web站點內(nèi)容(例如新聞、文章、共享價格和鏈接等)的方法,它用一個特殊的應用程序(一個聚合器)定期更新用戶PC上的RSS回饋。該RSS數(shù)據(jù)是使用XML進行編碼和傳輸?shù)摹?

  · AJAX-異步的JavaScript和XML,允許web開發(fā)者創(chuàng)建具有豐富特征的事件驅(qū)動的運行在web瀏覽器上的web應用程序。其中,JavaScript用于把XML編碼的數(shù)據(jù)發(fā)送到服務器端腳本(或從服務器端接收XML編碼的數(shù)據(jù)),并允許局部的實時的頁面更新而不需要更新所有頁面內(nèi)容。

  上面僅僅是XML的可能的應用的一部分。在以后文章中,我們將分析如何在PHP中使用這些應用軟件。

  三、 在PHP中使用XML

  自從PHP 5.0以來,PHP能與XML交互的可用選項顯著地增加。而PHP版本4所能提供的是不穩(wěn)定的而且是非w3c兼容的DOM XML擴展。
下面,我將集中討論PHP 5所提供給我們的三個允許我們與XML交互的方法:DOM,簡單XML和XPath。在可能之處,我將建議最適合于每種方法的條件和數(shù)據(jù)。所有的示例代碼將使用XML數(shù)據(jù)源來描述一個庫及其中包含的書。

程序代碼
復制代碼 代碼如下:

<xml version="1.0"?>
<library>
 <categories>
  <category cid="1">Web Development</category>
  <category cid="2">Database Programming</category>
  <category cid="3">PHP</category>
  <category cid="4">Java</category>
 </categories>
 <books>
 <book>
  <title>Apache 2</title>
  <author>Peter Wainwright</author>
  <publisher>Wrox</publisher>
  <category>1</category>
 </book>
 <book>
  <title>Advanced PHP Programming</title>
  <author>George Schlossnagle</author>
  <publisher>Developer Library</publisher>
  <category>1</category>
  <category>3</category>
 </book>
 <book>
  <title>Visual FoxPro 6 - Programmers Guide</title>
  <author>Eric Stroo</author>
  <publisher>Microsoft Press</publisher>
  <category>2</category>
 </book>
 <book>
  <title>Mastering Java 2</title>
  <author>John Zukowski</author>
  <publisher>Sybex</publisher>
  <category>4</category>
 </book>
</books>
</library>


四、 DOM

  DOM PHP擴展名允許使用W3C DOM API在XML文檔上進行操作。在PHP 5出現(xiàn)之前,這是PHP能存取XML文檔的唯一方法。如果你在JavaScript中使用了DOM,那么會認識到這些對象模型幾乎是一樣的。

  由于DOM方法在遍歷和操作XML文檔時比較羅嗦,所以任何DOM兼容的代碼都有明顯的優(yōu)點-與任何其它實現(xiàn)相同的W3C兼容的對象模型的API兼容。

  在下面的實例代碼中,我們使用DOM來顯示關于每本書的信息。首先,我們遍歷一下列表目錄,把它們的Id和相應的名字裝載到一個索引數(shù)組中。然后,我們顯示每本書的一個簡短描述:

  PHP:
復制代碼 代碼如下:

<?php
 /*這里我們必須指定XML版本:也即是1.0 */
 $xml = new DomDocument('1.0');
 $xml->load('xml/library.xml');
 /*首先,創(chuàng)建一個目錄列表*/
 $categories = array();
 $XMLCategories = $xml->getElementsByTagName('categories')->item(0);
 foreach($XMLCategories->getElementsByTagName('category') as $categoryNode) {
  /*注意我們是如何得到屬性的*/
  $cid = $categoryNode->getAttribute('cid');
  $categories[$cid] = $categoryNode->firstChild->nodeValue;
 }
?>
<html>
<head>
<title>XML Library</title>
</head>
<body>
<?
 php foreach($xml->getElementsBytagName('book') as $book):
 /*查找標題*/
 $title = $book->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
 /*查找作者-為了簡化起見,我們假設僅僅有一個作者*/
 $author = $book->getElementsByTagName('author')->item(0)->firstChild->nodeValue;
 /* 列表目錄*/
 $bookCategories = $book->getElementsByTagName('category');
 $catList = '';
 foreach($bookCategories as $category) {
  $catList .= $categories[$category->firstChild->nodeValue] . ', ';
 }
 $catList = substr($catList, 0, -2); ?>
<div>
<h2><?php echo($title) ?></h2>
<p><b>Author:</b>: <?php echo($author) ?></p>
<p><b>Categories: </b>: <?php echo($catList) ?></p>
</div>
<? php endforeach; ?>
</html>
[html]
  再提一下,修改XML是較麻煩的。例如,添加一個目錄的代碼如下:

  PHP:
[code]
function addCategory(DOMDocument $xml, $catID, $catName) {
 $catName = $xml->createTextNode($catName); //創(chuàng)建一個結點以存儲文本
 $category = $xml->createElement('category'); //創(chuàng)建一個目錄元素
 $category->appendChild($catName); //把文本添加到目錄元素上
 $category->setAttribute('cid', $catID); //設置目錄的ID
 $XMLCategories = $xml->getElementsByTagName('categories')->item(0);
 $XMLCategories->appendChild($category); //添加新目錄
}

  五、 保存XML

  你可以使用save()和saveXML()方法之一來把DOM描述轉(zhuǎn)換回XML字符串描述。save()方法用一指定的命名把XML保存到一個文件中,而saveXML()從文檔的部分或整體中返回一個字符串。

$xml->save('xml/library.xml');
//保存全部文件
$categories=$xml->saveXML($XMLCategories);
//返回一個包含種類的字符串

  為了說明把DOM兼容的代碼移植到另外的語言是如何容易,下面是用JavaScript形式實現(xiàn)的與以上功能相同的代碼:

Javascript:
復制代碼 代碼如下:

function doXML(){
 /* 首先創(chuàng)建一個種類列表*/
 var categories = Array();
 var XMLCategories = xml.getElementsByTagName('categories')[0];
 var theCategories = XMLCategories.getElementsByTagName('category');
 for (var i = 0; i < theCategories.length; i++) {
  /* 注意我們是怎樣得到屬性的*/
  var cid = theCategories[i].getAttribute('cid');
  categories[cid] = theCategories[i].firstChild.nodeValue;
 }
 var theBooks = xml.getElementsByTagName('book');
 for(var i = 0; i < theBooks.length; i++) {
  var book = theBooks[i];
  /* 查找標題*/
  var title = book.getElementsByTagName('title')[0].firstChild.nodeValue;
  /* 查找作者-為簡單起見,我們假定僅有一個作者*/
  var author = book.getElementsByTagName('author')[0].firstChild.nodeValue;
  /* 列出種類*/
  var bookCategories = book.getElementsByTagName('category');
  var catList = '';
  for(var j = 0; j < bookCategories.length; j++) {
   catList += categories[bookCategories[j].firstChild.nodeValue] + ', ';
  }
  catList = catList.substring(0, catList.length -2);
  document.open();
  document.write("<h2>" + title + "</h2>");
  document.write("<p><b>Author:</b>: " + author + "</p>");
  document.write("<p><b>Categories: </b>: " + catList + "</p>");
 }
 document.close();
}

  六、 簡單XML

  簡單XML確實簡單。它允許使用對象和數(shù)組存取方法來存取一個XML文檔及其元素和屬性。操作方式很簡單:

  · 元素(Element)-這些被描述為SimpleXMLElement對象的單個屬性。當有多個作為文檔或元素的子元素存在時,每個元素能被使用數(shù)組索引標志加以存取。

$xml->books;//返回元素"books"
$xml->books->book[0];//返回在books元素中的第一本書

  · 屬性(Attribute)-元素的屬性是通過關聯(lián)數(shù)組標志來存取和設置的,此時每一個索引對應于一個屬性名。

$category['cid'];//返回cid屬性的值

  · 元素數(shù)據(jù)(Element Data)-為了檢索包含在一個元素內(nèi)的文本數(shù)據(jù),必須使用(string)顯式地把它被轉(zhuǎn)換為一個字符串或使用print或echo輸出它。如果一個元素包含多個文本結點,那么它們將按被找到的順序連接起來。

echo ($xml->books->book[0]->title);//顯示第一本書的標題

  下面是使用簡單XML進行轉(zhuǎn)換的原來的實例。為了裝載XML文件,我們使用simplexml_load_file()函數(shù),由它來分析該XML文件并且把它裝載進一個SimpleXMLElement對象中:

  PHP:
復制代碼 代碼如下:

<?php
$xml = simplexml_load_file('xml/library.xml');
/* 把一個列表的目錄裝載到一個數(shù)組中*/
$categories = array();
foreach($xml->categories->category as $category) {
 $categories[(string) $category['cid']] = (string) $category;
}
?>
<html>
<head>
<title>XML Library</title>
</head>
<body>
<?php foreach($xml->books->book as $book):
/* 列舉目錄*/
$catList = '';
foreach($book->category as $category) {
 $catList .= $categories[((string) $category)] . ', ';
}
$catList = substr($catList, 0, -2); ?>
<div>
<h2><?php echo($book->title) ?></h2>
<p><b>Author:</b>: <?php echo($book->author) ?></p>
<p><b>Categories: </b>: <? php echo($catList) ?></p>
</div>
<? php endforeach; ?>
</html>


七、 修改XML

  盡管文本數(shù)據(jù)和屬性值可以通過使用簡單XML加以設置,但是不能新建這些對象。然而,SimpleXM的確提供了一種方法來實現(xiàn)DomElement對象和DomElement對象之間的轉(zhuǎn)換。為此,我修改了addCategory()函數(shù)來說明如何使用simplexml_import_dom()函數(shù)以添加目錄和把該文檔轉(zhuǎn)換回簡單的XML格式:

  PHP:
復制代碼 代碼如下:

function addCategory(SimpleXMLElement &$sXML, $catID, $catName) {
 $xml = new DOMDocument;
 $xml->loadXML($sXML->asXML());
 $catName = $xml->createTextNode($catName); //創(chuàng)建一個結點來存放該文本
 $category = $xml->createElement('category'); //創(chuàng)建一個目錄元素
 $category->appendChild($catName); //把文本添加到目錄元素
 $category->setAttribute('cid', $catID); //設置目錄id
 $XMLCategories = $xml->getElementsByTagName('categories')->item(0);
 $XMLCategories->appendChild($category); //添加新目錄
 $sXML = simplexml_import_dom($xml);
 return $sXML;
}

  同樣,SimpleXMLElement對象的asXML()函數(shù)可以用來檢索XML字符串并把它保存回一個文件中。

  八、 xPath

  毫無疑問,Xpath是"XML蛋糕之上的櫻桃"。XPath允許你使用象SQL一樣的查詢來查找一個XML文檔中的特定信息。DOM和SimpleXML都有內(nèi)置的對XPath的支持,如SQL,可以被用來提取你想從一XML文檔中提取的任何內(nèi)容。

  程序代碼
 · //category-查找所有的在文檔中出現(xiàn)的任何category。

  · /library/books-查找所有作為library的孩子出現(xiàn)的books

  · /library/categories/category[@cid]-查找所有作為library/categories的孩子出現(xiàn)且屬性為cid的category。

  · /library/categories/category[@att='2']-查找所有作為library/categories的孩子且具有屬性cid的值為2出現(xiàn)的category。

  · /library/books/book[title='Apache 2']-查找所有作為/library/books的孩子且其標題元素有一個值為Apache 2出現(xiàn)的book。

  其實,這僅是xPath冰山之一角。你可以使用xPath來創(chuàng)建大量復雜的查詢以便從你的文檔中提取幾乎任何信息。我再次修改了示例代碼來向你展示使用xPath是多么輕松愉快的事情。

  PHP:
復制代碼 代碼如下:

<?php
$xml = simplexml_load_file('xml/library.xml');
?>
<html>
<head>
<title>XML Library</title>
</head>
<body>
<?php foreach(((array)$xml->xpath("/library/books/book")) as $book):
/*列表目錄*/
$catList = '';
foreach($book->category as $category) {
 /*得到具有這個ID的目錄*/
 $category = $xml->xpath("/library/categories/category[@cid='$category']");
 $catList .= (string) $category[0] . ', ';
}
$catList = substr($catList, 0, -2); ?>
<div>
<h2><?php echo($book->title) ?></h2>
<p><b>Author:</b>: <?php echo($book->author) ?></p>
<p><b>Categories: </b>: <?php echo($catList) ?></p>
</div>
<?php endforeach; ?>
</html>

  九、 DOM和XPath

  在DOM中計算XPath查詢需要創(chuàng)建一個DOMXPath對象,下面的evaluate()函數(shù)返回一個DOMElement數(shù)組。
復制代碼 代碼如下:

$xPath = new DOMXPath($xml);
$xPath->evaluate("/library/books/book[title='Apache 2']");

  十、 結論

  現(xiàn)在,我們學習了如何使用了PHP提供給我們的工具來與XML交互。至此,我們已經(jīng)被"武裝起來"并準備好深入鉆研XML應用程序了。在下一篇文章中,我們將討論AJAX及其如何應用于象Google這樣的站點開發(fā)的。

相關文章

  • PHP中生成UUID自定義函數(shù)分享

    PHP中生成UUID自定義函數(shù)分享

    這篇文章主要介紹了PHP中生成UUID自定義函數(shù)分享,本文提供的代碼可以生成一個 UUID version 4,,需要的朋友可以參考下
    2015-06-06
  • Zend Studio for Eclipse的java.lang.NullPointerException錯誤的解決方法

    Zend Studio for Eclipse的java.lang.NullPointerException錯誤的解決方

    Zend Studio for Eclipse 6.x 可以算得上是最好的PHP的IDE了.
    2008-12-12
  • php strrpos()與strripos()函數(shù)

    php strrpos()與strripos()函數(shù)

    以下是對php中的strrpos函數(shù)與strripos函數(shù)的用法進行了詳細的介紹,需要的朋友可以過來參考下
    2013-08-08
  • php返回當前日期或者指定日期是周幾

    php返回當前日期或者指定日期是周幾

    本文給大家分享的是幾個日期函數(shù)的格式化方法,十分的簡單實用,有需要的小伙伴可以參考下。
    2015-05-05
  • PHP中變量引用與變量銷毀機制分析

    PHP中變量引用與變量銷毀機制分析

    這篇文章主要介紹了PHP中變量引用與變量銷毀機制,較為深入的分析了PHP中變量的引用機制及其原理以及對應的變量的銷毀機制,有助于深入理解PHP程序設計原理,需要的朋友可以參考下
    2014-11-11
  • php簡單實現(xiàn)多維數(shù)組排序的方法

    php簡單實現(xiàn)多維數(shù)組排序的方法

    這篇文章主要介紹了php簡單實現(xiàn)多維數(shù)組排序的方法,涉及php數(shù)組的遍歷及array_multisort函數(shù)的相關使用技巧,需要的朋友可以參考下
    2016-09-09
  • PHP中英混合字符串截取函數(shù)代碼

    PHP中英混合字符串截取函數(shù)代碼

    今天在遇到了一個中英字符串截取的問題,在gbk里中文里每個字占兩字節(jié),如果全是中文的話,用substr()函數(shù)就可以實現(xiàn)了,但中英都有的話就麻煩了,在以前收藏的代碼里找到了一個不錯的函數(shù),很好的實現(xiàn)了截取的功能
    2011-07-07
  • PHP的全局錯誤處理詳解

    PHP的全局錯誤處理詳解

    php自有try{throw{}}catch{}異常/錯誤捕獲系統(tǒng),難以在生產(chǎn)環(huán)境中運用;生產(chǎn)環(huán)境中,我們一般要求,一旦出現(xiàn)異常/錯誤,php立刻結束腳本,向訪客瀏覽器輸出出錯提示,并通過自定義函數(shù)向管理員發(fā)送消息
    2016-04-04
  • PHP解壓ZIP文件到指定文件夾的方法

    PHP解壓ZIP文件到指定文件夾的方法

    這篇文章主要介紹了PHP解壓ZIP文件到指定文件夾的方法,結合實例形式分析了php實現(xiàn)的zip操作類及相應使用技巧,需要的朋友可以參考下
    2016-11-11
  • 總結PHP中數(shù)值計算的注意事項

    總結PHP中數(shù)值計算的注意事項

    本文將對PHP中數(shù)據(jù)計算的一些犯錯的點進行整理,并給出解決方法,其中包括四舍五入、整數(shù)和小數(shù)相乘除和浮點數(shù)的怪異,有需要的朋友們可以參考借鑒。
    2016-08-08

最新評論