六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

PHP中的XML應用(一)

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

XML概貌
  談起XML(eXtended Markup Language:可擴展標記語言),我們不妨先看一段HTML的代碼:

<html>
<title>XML</title>
<body>
<p><center><font color="red">TEXT</font></center></p>
<a href="www.domain.com"><img src=http://cfan.net.cn/info/"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沒有例外事件,它定義了如下七個可能事件:

對象 XML解析函數 描述
元素 xml_set_element_handler() 元素的開始和結束
字符數據 xml_set_character_data_handler() 字符數據的開始
外部實體 xml_set_external_entity_ref_handler() 外部實體出現
未解析外部實體 xml_set_unparsed_entity_decl_handler() 未解析的外部實體出現
處理指令 xml_set_processing_instruction_handler() 處理指令的出現
記法聲明 xml_set_notation_decl_handler() 記法聲明的出現
默認 xml_set_default_handler() 其它沒有指定處理函數的事件

所有的回調函數必須將解析器的實例作為其第一個參數(此外還有其它參數)。

  對于本文最后的范例腳本,需要注意的是它既用到了元素處理函數又用到了字符數據處理函數。元素的回調處理函數通過xml_set_element_handler()來注冊。

這個函數需要三個參數:

解析器的實例
處理開始元素的回調函數的名稱
處理結束元素的回調函數的名稱
  當開始解析XML文檔時,回調函數必須存在。它們必須定義為與PHP手冊中所描述的原型一致。

  例如,Expat將三個參數傳遞給開始元素的處理函數。在腳本范例中,其定義如下:

function start_element($parser, $name, $attrs)

$parser是解析器標志,$name是開始元素的名稱,$attrs為包含元素所有屬性和值的數組。

一旦開始解析XML文檔,Expat在遇到開始元素是都將調用start_element()函數并將參數傳遞過去。

  XML的Case Folding選項
  用xml_parser_set_option()函數將Case folding選項關閉。這個選項默認是打開的,使得傳遞給處理函數的元素名自動轉換為大寫。但XML對大小寫是敏感的(所以大小寫對統計XML文檔是非常重要的)。對于我們的范例,case folding選項必須關閉。

<待續>




主站蜘蛛池模板: 亚洲精品在线第一页 | 天天插狠狠干 | 日韩免费在线观看 | 天天草夜夜 | 日本又黄又硬又粗好爽视频免费 | 一级女性全黄久久生活片 | 天堂色区| 日韩夜夜操 | 欧美一级纶理片免费 | 无遮挡在线观看 | 午夜在线成人 | 亚洲精品高清在线 | 青娱乐极品视频在线观看 | 日韩污| 日韩精品三级 | 亚洲mv在线观看 | 日本在线观看视频 | 亚洲黄色成人 | 四虎地址 | 一级毛片免费毛片一级毛片免费 | 亚州男人的天堂 | 五月婷婷伊人 | 色天使在线播放 | 中文字幕精品一区影音先锋 | 欧美综合色区 | 日本一区二区三区中文字幕视频 | 四虎精品影院永久在线播放 | 日韩伦理在线视频 | 特片伦理在线网站 | 天天躁夜夜躁狠狠躁2018a | 视频一区视频二区在线观看 | 天天草夜夜骑 | 热久久网站 | 天天影视色香欲综合免费 | 日本三级香港三级三级人!妇久 | 亚洲第一中文字幕 | 青草青草视频 | 色五月情 | 亚洲福利一区福利三区 | 亚洲综合成人网 | 在线免费观看韩国a视频 |