PHP基礎之使用Expat解析xml

2021-06-29 15:09:32 字數 2162 閱讀 2698

這篇博文記錄php中解析xml的一種方法:使用expat解析xml,下面是待解析的xml檔案的內容:

<?xml version="1.0" encoding="utf-8"?>

zhangsan

21teacher

male

ibm

然後是編寫php**,解析上面的xml文件,下面是index.php的原始碼:

<?php 

//建立乙個解析器

$parser = xml_parser_create();

//開始乙個標籤時被呼叫

function start($parser, $name, $attr)

} //結束乙個標籤時被呼叫

function stop($parser, $name)

echo "

"; }

//遇到標籤中的內容時被呼叫

function char($parser, $data)

xml_set_element_handler($parser, "start", "stop");

xml_set_character_data_handler($parser, "char");

$file = fopen("data.txt", "r") or die("open file error");

while(!feof($file))

xml_parser_free($parser);

?>

上面的解析過程主要分為如下幾個步驟:

1、建立解析器,使用expat解析xml時,建立解析器使用xml_parser_create()函式

2、編寫開始標籤、結束標籤、遇到標籤中的字元這三種情況對應的處理函式,下面分別說明:

①開始標籤的處理函式,對應到上面**中的start()函式,該函式有三個引數,說明如下:

start_element_handler ( resource $parser , string $name , array $attribs )

parser

第乙個引數 parser 為指向要呼叫處理器的 xml 解析器的指標。

name

第二個引數 name 為該處理器為之被呼叫的元素名。如果大小寫摺疊(case-folding)對該解析器有效,元素名將用大寫字母表示。

attribs

第三個引數 attribs 為乙個包含有對應元素的屬性的陣列(如果該元素有屬性)。陣列元素的下標為屬性名,元素的值即為屬性的值。屬性名將以和元素名同樣的標準進行大小寫摺疊(case-folded),其值不進行大小寫摺疊。 屬性的原始順序將會被引數保留,用 each() 函式遍歷 attribs 時,該陣列下表的順序和屬性的順序相同。

②結束標籤的處理函式,對應到上面**中的stop()函式,該函式有兩個引數,說明如下:

end_element_handler ( resource $parser , string $name )

parser

第乙個引數 parser 為指向要呼叫處理器的 xml 解析器的指標。

name

第二個引數 name 為該處理器為之被呼叫的元素名。如果大小寫摺疊(case-folding)對該解析器有效,元素名將用大寫字母表示。

③遇到標籤中的字元的處理函式,對應到上面**中的char()函式,該函式有兩個引數,說明如下:

bool xml_set_character_data_handler ( resource $parser , callback $handler )

為 parser 變數指向的 xml 解析器指定字元資料處理函式。handler 為表示乙個函式名稱的字串,該函式必須在為 parser 指定的解析器呼叫 xml_parse() 函式時已存在。

由 handler 引數命名的函式名必須接受兩個引數:

handler ( resource $parser , string $data )

parser

第乙個引數 parser 為指向要呼叫處理器的 xml 解析器的指標。

data

第二個引數 data 為包含有字元資料的字串。

上面的**在瀏覽器中執行結果如下圖:

php 使用expat方式解析xml檔案操作示例

test.xml george john re程式設計客棧minder don t forget the meeting george2 john2 reminder2 don t程式設計客棧 forget the meeting 2程式設計客棧ody php檔案 parser xml parser...

PHP 和 XML 使用expat函式 三

php 和 xml 使用expat函式 三 如何在乙個php 指令碼中使用這個類呢?實際上非常簡單。這裡有乙個例子 首先類定義需要被包括在指令碼中 require class dir.class.newsboy.php 然後,我們建立乙個類的例項,並且設定檔案性為我們的xml文件的實際鏈結。news...

PHP基礎學習之陣列使用要點

一 什麼是php陣列?陣列 array 是一組有序的變數,其中每個變數都被稱為乙個元素。每個元素由乙個特殊的識別符號來區分,這個識別符號稱之為鍵 也可以稱之為下標 陣列中的每個元素都包含兩項 鍵和值。可以通過鍵值來獲取相對應的陣列元素,這些鍵值可以是數值鍵或者關聯鍵。陣列可以存入不同型別的資料,是乙...