PHP中的XML應用

來源:互聯網
上載者:User

 綜述

  XML代表Extensible Markup Language(eXtensible Markup Language的縮寫,意為可擴充的標記語言)。XML是一套定義語義標記的規則,這些標記將文檔分成許多組件並對這些組件加以標識。它也是元標記語言,即定義了用於定義其他與特定領域有關的、語義的、結構化的標記語言的句法語言。XML是當今最熱門的技術。而PHP也具有分析XML文檔的功能,下面我們將共同探討一下PHP中的XML應用的情況。
  XML概貌

  談起XML(eXtended Markup Language:可延伸標記語言 (XML)),我們不妨先看一段HTML的代碼:

  <html>
  <title>XML</title>
  <body>
  <p><center><font color="red">TEXT</font></center></p>
  <a href="www.domain.com"><img src="logo.jpg"/></a>
  </body>
  </html>

  上面這段代碼從結構上就符合XML的規則,XML可以理解是包含資料的樹形的結構類型:

  1、引用同一個元素的時候,使用一致的大小寫,如<center></Center>就是不符合規定的
  2、任何屬性值(如 href="????")要用""引起來,如<a href=www.yahoo.com>就是不正確的
  3、所有元素必須由開啟<和關閉>標註組成,元素應該形如<body></body>或空元素<img ... />,假如結尾的 "/>" 少了"/"就是錯誤的代碼
  4、所有元素必須彼此嵌套,就像寫程式的迴圈一樣,而且,所有的元素必須嵌套於根項目之中,比如上面的代碼所有的內容都嵌套於<html></html>之中。
  5、元素名稱(即上面的body a p img等)應為字母開頭。
  怎樣應用PHP的XML解析器Expat?

  Expat是PHP指令碼語言的XML解析器(同樣稱為XML處理器),可以使程式訪問XML文檔的結構和內容。它是一種基於事件的解析器。XML解析器有兩種基本類型:

  基於樹型的解析器:將XML文檔轉換成樹型結構。這類解析器分析整篇文章,同時提供一個API來訪問所產生樹的每個元素。其通用的標準為DOM(文檔對象模式)。

  基於事件的解析器:將XML文檔視為一系列的事件。當一個非凡事件發生時,解析器將調用開發人員提供的函數來處理。基於事件的解析器有一個XML文檔的資料集中視圖,也就是說它集中在XML文檔的資料部分,而不是其結構。這些解析器從頭到尾處理文檔,並將類似於-元素的開始、元素的結尾、特徵資料的開始等等-事件通過回調(callback)函數報告給應用程式。

  以下是一個"Hello-World"的XML文檔範例:

<greeting>
Hello World
</greeting>

  基於事件的解析器將報告為三個事件:

  開始元素:greeting
  CDATA項的開始,值為:Hello World
  結束元素:greeting

  基於事件的解析器不產生描述文檔的結構,當然假如使用Expat,必要時它一樣可以在PHP中產生完全的原生樹結構。在CDATA項中,基於事件的解析器不會得到父元素greeting的資訊。然而,它提供一個更底層的訪問,這就使得可以更好地利用資源和更快地訪問。通過這種方式,就沒有必要將整個文檔放入記憶體;而事實上,整個文檔甚至可以大於實際記憶體值。

  上面Hello-World的範例雖然包括完整的XML格式,但它是無效的,因為既沒有DTD(文件類型定義)與其聯絡,也沒有內嵌DTD。但是Expat是一個不檢查有效性的解析器,因此忽略任何與文檔聯絡的DTD。應注重的是文檔仍然需要完整的格式,否則Expat(和其他符合XML標準的解析器一樣)將會隨著出錯資訊而停止。
  編譯Expat

  Expat可以編譯進PHP3.0.6版本(或以上)中。從Apache1.3.22開始,Expat已經作為Apache的一部分。在Unix系統中,可以通過-with-xml選項配置PHP將其編譯入PHP。

  假如將PHP編譯為Apache的模組,而Expat將預設作為Apache的一部分。在Windows中,則必須要載入XML動態串連庫。

  XML範例:XMLstats
  我們所要討論的範例是使用Expat來收集XML文檔的統計資料。

  對於文檔中每個元素,以下資訊都將被輸出:
該元素在文檔中使用的次數
該元素中字元資料的數量
元素的父元素
元素的子項目


  注重:為了示範,我們利用PHP來產生一個結構來儲存元素的父元素和子項目.
 用於產生XML解析器執行個體的函數有哪些?

  用於產生XML解析器執行個體的函數為xml_parser_create()。該執行個體將用於以後的所有函數。這個思路非常類似於PHP中MySQL函數的串連標記。在解析文檔前,基於事件的解析器通常要求註冊回呼函數-用於特定的事件發生時調用。Expat沒有例外事件,它定義了如下七個可能事件:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.