這篇博文記錄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 是一組有序的變數,其中每個變數都被稱為乙個元素。每個元素由乙個特殊的識別符號來區分,這個識別符號稱之為鍵 也可以稱之為下標 陣列中的每個元素都包含兩項 鍵和值。可以通過鍵值來獲取相對應的陣列元素,這些鍵值可以是數值鍵或者關聯鍵。陣列可以存入不同型別的資料,是乙...