一、概述及安裝
XML(可擴展標記語言,eXtensible Markup Language) 是一種在互聯網上用於結構化文件互動的資料格式。 它是互聯網協會(W3C)定義的一個標準。與 XML 及其相關技術的資訊可存取http://www.php.cn/。
此 PHP 擴充實作 支援 James Clark 使用 PHP 編寫的 expat。 此工具包可解析(但不能驗證) XML 文件。它支援 PHP 所提供的 3 種字元編碼: US-ASCII, ISO-8859-1 和 UTF-8。 不支援 UTF-16。
此擴充功能可 建立 XML 解析器 並為不同的 XML 事件定義 處理程序(handler)。 每個 XML 解析器也存在少數可調節的參數。
此擴充功能需要 libxml PHP 擴充。這表示需要使用 --enable-libxml ,儘管這將隱式完成因為 libxml 是缺省開啟的。
缺省情況下,此擴充使用expat compat layer 。也可使用expat, 此函式庫位於 http://www.php.cn/。 使用expat函式庫中的Makefile 是不會預設建置出庫檔案的,可使用下列建置規則進行建置:
libexpat.a: $(OBJS)
ar -rc $@ $(OBJS)
ranlib $@
登入後複製
expat 的原始程式碼可在RPM 安裝套件可在www://www.php http://www.php .cn/ 找到。
此擴充功能預設為啟用,編譯時可透過下列選項停用: --disable-xml
這些函數預設為有效的,使用了捆綁的 expat 函式庫。您可以透過參數 --disable-xml 來封鎖 XML 的支援。如果您將 PHP 編譯為 Apache 1.3.9 或更高版本的模組, PHP 將自動使用 Apache 捆綁的 expat 函式庫。如果您不希望使用該捆綁的 expat 函式庫,請在執行 PHP 的 configure 設定腳本時使用參數 --with-expat-dir=DIR ,其中 DIR 應該指向 expat 安裝的根目錄。
PHP 的 Windows 版本已內建對此擴充的支援。不需要載入額外的擴充來使用這些函數。
二、事件處理器
XML 事件處理器的定義如下:
被支援的XML 處理器
PHPP 處理器函數 | 當XML 解析器遇到開始或結束標籤時,會觸發元素事件。 開始標籤和結束標籤有不同的處理器。 |
xml_set_character_data_handler()
字元資料範指 XML 文件中所有非標記的內容,包括標籤之間的空格。 請注意,XML 解析器不會新增或刪除任何空格,由應用程式(你)來判斷空格是否有意義。 |
|
xml_set_processing_instruction_handler()
PHP 程式設計師必須熟練處理指令(PI)。 是處理指令, 其中php被稱為「處理指令物件」。 除所有以「XML」開頭的處理指令物件是系統保留的外, 其他的處理函數都是由應用程式指定的。 |
|
xml_set_default_handler()
不執行其他處理函數,則會執行缺省的處理函數。 在缺省的處理函數中可取得如 XML 和文件類型聲明等資訊。 |
|
xml_set_unparsed_entity_decl_handler()
未解析的實體宣告(NDATA)會呼叫此處理函數。 |
|
xml_set_notation_decl_handler()
符例如,引用一個檔案或URL。實例可參考 XML 外部實體例程。 |
|
三、大寫轉換
元素處理函數可取得元素名稱轉換為 case-folded(大寫字母)形式。 Case-folding 被定義為「將非大寫字母替換為相對應的大寫字母的字串操作」。換句話說,在 XML 中,case-folding 就是要轉換成大寫。
預設情況下,所有的通過處理函數的元素名稱都被轉換為大寫字母。每個 XML 解析器可分別透過 xml_parser_get_option()與xml_parser_set_option()函數來查詢與控制此項功能。
四、錯誤碼
下列常數是XML 相關的錯誤碼( xml_parse()函數的回傳值):
XML_ERROR_NONE
-
XML_ERROR_NONE
OR_SYNTAX
XML_ERROR_NO_ELEMENTS
XML_ERROR_INVALID_TOKEN
XML_ERROR_UNCLOSED_TOKEN
XML_ERROR_PARTIAL_CHARSMA OR_DUPLICATE_ATTRIBUTE
XML_ERROR_JUNK_AFTER_DOC_ELEMENT
-
XML_ERROR_PARAM_ENTITY_REFIDS
XML_ERROR_RECURSIVE_ENTITY_REF
-
XML_ERROR_ASYNC_ENTITY
-
XML_ERROR_BAD_CHAR_REF
-
XML_ERROR_BINARY_ENTITY_REF
-
XML_ERROR_ATTRIBUTE_EXTERNAL_RDREFMMLFMLFAPFAP_FDFDFT活動_F4DFMDMDFTBC
XML_ERROR_UNKNOWN_ENCODING
XML_ERROR_INCORRECT_ENCODING
- RNA_ERROR_RORD_RWDMDDD5_D4m8_F8_FT5_FWOR_FT_DFT樂_愛2__FFOR_FW愛_DTDTD5_44_F4_FT襯衫DLING
- 五、字符編碼PHP 的XML 擴展透過幾種不同的字元編碼支援Unicode 字符集。 有兩類字元編碼, 原始編碼 和 目標編碼. 在PHP的內部展現中,文檔始終是使用UTF-8編碼。
- 當 XML 被 解析 後,原始編碼就完成了。 在建立 XML 解析器時, 可以指定原始編碼(在XML 解析器此後的生命週期裡,不能修改此編碼)。 支援的原始編碼有 ISO-8859-1, US-ASCII 和 UTF-8. 前兩種是單字節編碼, 即每一個字元表現為一個位元組。 UTF-8 可將字元編碼為一串不定數量(最高21)的位元(bit), 排列成1到4個位元組。 PHP 中使用的預設原始編碼是ISO-8859-1.當 PHP 將資料傳給 XML 處理函數時,目標編碼就完成了。 在建立 XML 處理器時,目標編碼被設定為與原始編碼相同,但可任意修改。 目標編碼會影響字元資料及標籤名,與處理指令目標。
- 如 XML 解析器遇到原始編碼所能表示的範圍之外的字元時,會回傳一個錯誤。 如 PHP 遇到在被解析的 XML 文件中不能用所指定的目標編碼表示的字元時, 這個問題字元會被「降級」。通常來說,就是那些字元會被替換成問號(?)。
- 以上就是PHP擴充之XML操作(二)-XML解析器安裝及概述的內容,更多相關內容請關注PHP中文網(www.php.cn)!