如何用PHP工具包expat解析XML_PHP教程

來源:互聯網
上載者:User
如今人人鼓吹XML是Web開發人員最好的朋友,有了XML的幫忙,後者即可輕鬆地格式化和顯示來自幾乎任何資料來源的資料。但是,對動態內容而言,格式優良的資料卻還遠遠談不上達到理想狀態。大多數的Web開發人員都會告訴你,今天的網路上沒有動態內容怎麼能行!問題是:“到底該如何用XML建立動態內容呢?”
答案是用動態內容處理語言來解析XML,比如用PHP或者Perl等,從理論上說,這類程式語言是可以出於各種目的利用XML的。無非是採用一些能解析XML的工具包而已。James Clark就提供了一種名叫expat的工具包。expat XML工具包用C語言解析XML,令PHP與XML輕鬆共舞。
PHP是一種專為Web設計的絕佳指令碼語言。XML是表示Web內容的標準。兩者聯手真是要多美有多美!
下面我會給讀者示範一個簡單的樣本,通過這個例子即可說明如何用PHP把XML文檔解析為HTML。然後我會介紹一些PHP的其他XML概念。用PHP解析XML很簡單,操作起來很直觀但卻需要對細節有所解釋。一旦真正掌握了應用的要領,你肯定會驚奇自己怎麼不早想到把它們倆攏一塊兒來。
概述
PHP用expat這種XML工具包,通過C語言來解析XML。這個工具包的函數集同Perl XML解析所採用的函數集是一樣的,此外,這種工具包還是事件驅動型的解析器。這就是說,expat把每個XML標籤或者新一行代碼當作事件的起始,而事件就是函數的觸發器。Expat的安裝非常簡單,如果你正在用著Apache Web伺服器,那麼你可以在PHP XML參考頁上找到安裝和下載指南。
用PHP解析XML的基本任務是這樣的:首先,建立XML解析器的一個執行個體。接著,定義處理觸發事件的函數,比如開始或者結束標籤等。隨後,定義實際意義的資料處理程式。最後,開啟XML檔案,讀取檔案資料並解析資料。之後關閉檔案釋放XML解析器。
你瞧,就像我說的那樣,這套操作過程沒什麼特別的。不過,在我們討論具體的樣本之前先瞭解以下的一些警示:
Expat不對XML進行檢驗。這意味著只要XML檔案格式正確——所有的元素嵌套得當、開始和關閉標籤沒有任何錯誤——它就會被解析。Expat可不管XML是否遵守XML檔案頭中引用的標準或者定義。
Expat把XML標籤全部轉換為大寫字母。如果你的指令碼在標籤名和其他內容上大小寫字母混用可就要小心了。
PHP是在magic quotes設定啟用的情況下編譯而成,那麼複雜的XML檔案不會得到正確的解析。要是magic quotes不是預設設定,你就當我沒說。
好了,我們現在就來看看有關的樣本!
基本樣本
為了把複雜的事情簡單化,我在例子中省略了錯誤檢查和其他一些不必要的東西,當然,你可以在自己的代碼隨心所欲。我假定你早就熟悉PHP及其文法,而我會對XML函數做一番解釋。首先我會說明指令碼程式的含義,接著定義使用者定義函數,實際上這些函數位於引用它們的代碼之前。相關附件:程式清單A 所示為指令碼的完整代碼,指令碼要解析的XML文檔則是 相關附件:程式清單B。處理之後的輸出結果如表A所示。
XML Articles
"Remedial XML for programmers: Basic syntax" In this first installment in a three-part series, I'll introduce you to XML and its basic syntax.
"Remedial XML: Enforcing document formats with DTDs" To enforce structure requirements for an XML document, you have to turn to one of XML's attendant technologies, data type definition (DTD).
"Remedial XML: Using XML Schema" In this article, we'll briefly touch on the shortcomings of DTDs and discuss the basics of a newer, more powerful standard: XML Schemas.
"Remedial XML: Say hello to DOM" Now it's time to put on your programmer's hat and get acquainted with Document Object Model (DOM), which provides easy access to XML documents via a tree-like set of objects.
"Remedial XML: Learning to play SAX" In this fifth installment in our Remedial XML series, I'll introduce you to the SAX API and provide some links to SAX implementations in several languages.
表A PHP解析XML的輸出結果
首先我建立了XML解析器的一個執行個體:
$parser = xml_parser_create();
接著,我定義解析器遭遇開始和結束標籤時的操作。注意“startElement”和“endElement”是使用者定義的函數,當然你可以按照自己的喜好給它們起個其他名字,但我起的這些名字可是標準的習慣要求。
xml_set_element_handler($parser, “startElement”, “endElement”);
然後我定義了資料操作。這裡的“characterData”也是使用者定義的函數,名字也是習慣性的。
xml_set_character_data_handler($parser, “characterData”);
現在開啟檔案讀取資料。你可以在這裡開始編寫錯誤處理代碼,我在例子中省略了這些錯誤處理。不要忘了在指令碼的開頭定義$xml_file。
$filehandler = fopen($xml_file, “r”);
我開始讀取檔案內容,一次讀4K位元組並放在變數“$data”內直到檔案末尾。我用xml_parse解析讀取的這些資料區段。
while ($data = fread($filehandler, 4096)) {
xml_parse($parser, $data, feof($filehandler));
}
  • 共2頁:
  • 上一頁
  • 1
  • 2
  • 下一頁

http://www.bkjia.com/PHPjc/364094.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/364094.htmlTechArticle如今人人鼓吹XML是Web開發人員最好的朋友,有了XML的幫忙,後者即可輕鬆地格式化和顯示來自幾乎任何資料來源的資料。但是,對動態內容而言...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.