PHP語言能夠輕松地處理XML。解析XML在許多Web應(yīng)用程序中都很常見,例如將XML數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫,使用XML格式的API和Web服務(wù)。PHP在解析XML方面提供了幾種不同的方法,其中樣式表語言轉(zhuǎn)換(XSLT)和SimpleXML是最常見的兩種方法。在本文中,我們將討論如何使用PHP解析XML文檔,特別是使用PHP的DOM和SimpleXML庫。
要解析XML文檔,必須首先創(chuàng)建一個(gè)DOMDocument對象(簡稱DOM)。
$doc = new DOMDocument();
DOMDocument 對象表示整個(gè) XML 文檔。DOMDocument 類提供了許多有用的方法,例如 load() 和 loadXML() 方法,可以從一個(gè)文件或字符串加載XML文檔。下面的示例演示如何使用 DOM 解析 XML 文檔
$xml=simplexml_load_file("books.xml") or die("Error: Cannot create object"); print_r($xml);
上面這段代碼可以解析一個(gè)名為“books.xml”的XML文檔。假設(shè)文檔內(nèi)容如下
Gambardella, Matthew XML Developer's Guide 44.95 Ralls, Kim Midnight Rain 5.96 Corets, Eva Maeve Ascendant 5.95 Corets, Eva Oberon's Legacy 5.95
上述代碼輸出的結(jié)果如下
SimpleXMLElement Object ( [book] =>Array ( [0] =>SimpleXMLElement Object ( [author] =>Gambardella, Matthew [title] =>XML Developer's Guide [price] =>44.95 ) [1] =>SimpleXMLElement Object ( [author] =>Ralls, Kim [title] =>Midnight Rain [price] =>5.96 ) [2] =>SimpleXMLElement Object ( [author] =>Corets, Eva [title] =>Maeve Ascendant [price] =>5.95 ) [3] =>SimpleXMLElement Object ( [author] =>Corets, Eva [title] =>Oberon's Legacy [price] =>5.95 ) ) )
此示例將返回一個(gè)SimpleXMLElement對象。 由于構(gòu)建此對象的方法,每個(gè)元素均為相同名稱的數(shù)組元素。 這表示您可以輕松訪問每個(gè)元素,而不必關(guān)注在DOM對象可能涉及的命名空間和屬性名稱等細(xì)節(jié)。
SimpleXML庫是PHP中一個(gè)使用非常廣泛的XML解析庫,由于其方便易用,它往往被更多人選用。在PHP 5中引入的SimpleXML庫是處理XML最簡單的方式之一。 就像我們上面所見的那樣,一行簡單的代碼。
$xml=simplexml_load_file("books.xml") or die("Error: Cannot create object");
就初始化了一個(gè)SimpleXMLElement對象。與DOM對象相比,SimpleXML對象沒有那么底層的API,但是對于大多數(shù)人來說,它會更快,更容易使用。
在PHP中,使用libxml庫可以輕松解析XML文檔。libxml提供DOM解析器,SAX解析器和SimpleXML解析器等功能。通過使用DOM解析器,您可以在內(nèi)存中創(chuàng)建XML樹,輕松查找和訪問元素,以及添加,修改或刪除元素。
當(dāng)然,任何解析XML的方法都有一些缺點(diǎn)。例如,DOM解析器和SimpleXML解析器要求文件在內(nèi)存中完全加載,這可能會導(dǎo)致效率問題,特別是當(dāng)我們處理非常大的XML文檔時(shí)。
在處理XML文檔時(shí),我們需要理解其中的元素。元素是XML文檔的最基本組成部分,是結(jié)構(gòu)化文檔的基本組件之一。元素有一個(gè)名稱和一個(gè)值,并且可以有屬性和子元素,這些屬性和子元素都是由XML語法定義的。
考慮下面的例子:
Everyday Italian Giada De Laurentiis 2005 30.00 Harry Potter J K. Rowling 2005 29.99 XQuery Kick Start James McGovern Per Bothner Kurt Cagle James Linn Vaidyanathan Nagarajan 2003 49.99 Learning XML Erik T. Ray 2003 39.95
如何解析出其中某一個(gè)元素,比如bookstore下所有的book元素?SimpleXML的實(shí)現(xiàn)方式如下:
$xml = simplexml_load_file('books.xml'); foreach ($xml->book as $book) { echo $book->title . "\n"; echo $book['category'] . "\n"; }
上述代碼將打印出每個(gè)book元素的title和category屬性。
在PHP中解析XML文檔是一個(gè)非常常見的任務(wù)。PHP提供了一個(gè)方便的DOM擴(kuò)展庫和一個(gè)易于使用的SimpleXML庫。DOM和SimpleXML庫提供了各種各樣的工具,可以用于解析XML文檔并對其進(jìn)行操作。無論您選擇使用哪種方法,都可以輕松地讀取XML數(shù)據(jù)以及將其轉(zhuǎn)換為其他格式,例如數(shù)據(jù)庫或Web服務(wù)。