SAX的全稱是Simple API for XML,它是用于解析XML文檔的接口,是基于回調(diào)形式的。從PHP3開(kāi)始就已經(jīng)支持了SAX,到現(xiàn)在也沒(méi)有太大的變化。在PHP5中,API接口并沒(méi)有改變,所以你的代碼仍然可以運(yùn)行。唯一不同的是它不再基于EXPAT庫(kù),而是基于LIBXML2庫(kù)。
DOM (文檔對(duì)象模型)是由W3C制定的一套訪問(wèn)XML文檔樹(shù)的標(biāo)準(zhǔn)。在PHP4可以使用DOMXML來(lái)對(duì)此進(jìn)行操作,DOMXML的最主要問(wèn)題是它不符合標(biāo)準(zhǔn)的命名方法。而且在很長(zhǎng)一段時(shí)間內(nèi)還存在內(nèi)存泄漏問(wèn)題(PHP4.3已經(jīng)修復(fù)了這個(gè)問(wèn)題)。
class Articles extends DomDocument { function __construct() { //必須調(diào)用! parent::__construct(); }
function addArticle($title) { $item = $this->createElement("item"); $titlespace = $this->createElement("title"); $titletext = $this->createTextNode($title); $titlespace->appendChild($titletext); $item->appendChild($titlespace); $this->documentElement->appendChild($item); } } $dom = new Articles(); $dom->load("articles.xml"); $dom->addArticle("XML in PHP5"); print $dom->save("newfile.xml");
HTML PHP5中一個(gè)經(jīng)常不被注意到的特性是libxml2庫(kù)對(duì)HTML的支持,你不僅可以使用DOM擴(kuò)展載入結(jié)構(gòu)良好(well-formed)的XML文檔,還可以載入非結(jié)構(gòu)良好的(not-well-formed)HTML文檔,把它當(dāng)做標(biāo)準(zhǔn)的DOMDocument對(duì)象,使用所有能用的方法和特性,比如XPath和SimpleXML。
看到了吧,這后面真是太神奇了,有許多不同的辦法可以得到我們想要的結(jié)果,例如, $item->title[0]返回和例子中相同的結(jié)果,另一方面,foreach($sxe->item->title as $item)只返回第一個(gè)title,并不是所有在文檔中的title元素。(就像我在XPath中預(yù)期的那樣)。