亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

PHP XML Expat

PHP XML Expat 解析器

XML是一種流行的半結(jié)構(gòu)化文件格式,以一種類似數(shù)據(jù)庫的格式存儲數(shù)據(jù)。 在實(shí)際應(yīng)用中,一些簡單的、安全性較低的數(shù)據(jù)往往使用 XML文件的格式進(jìn)行存儲。 這樣做的好處一方面可以通過減少與數(shù)據(jù)庫的交互性操作提高讀取效率, 另一方面可以有效利用 XML的優(yōu)越性降低程序的編寫難度。

內(nèi)建的 Expat 解析器使在 PHP 中處理 XML 文檔成為可能。

XML 是什么?

XML是“可擴(kuò)展性標(biāo)識語言(eXtensible Markup Language)”的縮寫,是一種類似于 HTML的標(biāo)記性語言。 但是與 HTML不同,XML主要用于描述數(shù)據(jù)和存放數(shù)據(jù),而 HTML主要用于顯示數(shù)據(jù)。

XML 用于描述數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)是什么。XML 文件描述了數(shù)據(jù)的結(jié)構(gòu)。

在 XML 中,沒有預(yù)定義的標(biāo)簽。您必須定義自己的標(biāo)簽。

舉個例子:

   <?xml version="1.0"?>
        <threads>
            <thread>
                <title>Welcome </title>
                <author>Simon </author>
                <content>Welcome to XML guestbook!! </content>
             <thread>
        </threads>

在一個 XML文件的頂部,通常使用<?xml version="1.0"?>來標(biāo)識 XML數(shù)據(jù)的開始和 XML數(shù)據(jù)使用標(biāo)準(zhǔn)的版本信息。

<thread>與 <thread>標(biāo)簽標(biāo)記了這是一段留言。在留言中有標(biāo)題、作者、內(nèi)容,完整的表述了一條留言信息。

如需學(xué)習(xí)更多關(guān)于 XML 的知識,請訪問我們的 XML 教程。

Expat 是什么?

如需讀取和更新 - 創(chuàng)建和處理 - 一個 XML 文檔,您需要 XML 解析器。

有兩種基本的 XML 解析器類型:

1. 基于樹的解析器:這種解析器把 XML 文檔轉(zhuǎn)換為樹型結(jié)構(gòu)。它分析整篇文檔,并提供了對樹中元素的訪問,例如文檔對象模型 (DOM)。

2. 基于事件的解析器:將 XML 文檔視為一系列的事件。當(dāng)某個具體的事件發(fā)生時,解析器會調(diào)用函數(shù)來處理。

Expat 解析器是基于事件的解析器。

基于事件的解析器集中在 XML 文檔的內(nèi)容,而不是它們的結(jié)構(gòu)。正因為如此,基于事件的解析器能夠比基于樹的解析器更快地訪問數(shù)據(jù)。

請看下面的 XML 片段:

<from>Jani</from>

基于事件的解析器把上面的 XML 報告為一連串的三個事件:

開始元素:from

開始 CDATA 部分,值:Jani

關(guān)閉元素:from

上面的 XML 實(shí)例包含了形式良好的 XML。不過這個實(shí)例是無效的 XML,因為沒有與它關(guān)聯(lián)的文檔類型聲明 (DTD)。

然而,在使用 Expat 解析器時,這沒有區(qū)別。Expat 是不檢查有效性的解析器,忽略任何 DTD。

作為一款基于事件、非驗證的 XML 解析器,Expat 快速且輕巧,十分適合 PHP 的 Web 應(yīng)用程序。

注釋:XML 文檔必須形式良好,否則 Expat 會生成錯誤。

安裝

XML Expat 解析器函數(shù)是 PHP 核心的組成部分。無需安裝就可以使用這些函數(shù)。

XML 文件

下面的 XML 文件將應(yīng)用在我們的實(shí)例中:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>


初始化 XML 解析器

我們要在 PHP 中初始化 XML 解析器,為不同的 XML 事件定義處理器,然后解析這個 XML 文件。

實(shí)例

<?php
//初始化XML解析器
$parser=xml_parser_create();
//在元素開始時使用的函數(shù)
function start($parser,$element_name,$element_attrs)
{
switch($element_name)
{
case "NOTE":
echo "-- Note --<br>";
break;
case "TO":
echo "To: ";
break;
case "FROM":
echo "From: ";
break;
case "HEADING":
echo "Heading: ";
break;
case "BODY":
echo "Message: ";
}
}
//函數(shù)結(jié)束時使用的函數(shù)
function stop($parser,$element_name)
{
echo "<br>";
}
//查找字符數(shù)據(jù)時使用的函數(shù)
function char($parser,$data)
{
echo $data;
}
//指定元素的處理
xml_set_element_handler($parser,"start","stop");
//指定數(shù)據(jù)處理程序
xml_set_character_data_handler($parser,"char");
//打開XML文件
$fp=fopen("test.xml","r");
//讀取數(shù)據(jù)
while ($data=fread($fp,4096))
{
xml_parse($parser,$data,feof($fp)) or 
die (sprintf("XML Error: %s at line %d", 
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
//釋放內(nèi)存
xml_parser_free($parser);
?>

以上代碼將輸出:

-- Note --
To: Tove
From: Jani
Heading: Reminder
Message: Don't forget me this weekend!

工作原理:

1. 通過 xml_parser_create() 函數(shù)初始化 XML 解析器

2. 創(chuàng)建配合不同事件處理程序的的函數(shù)

3. 添加 xml_set_element_handler() 函數(shù)來定義,當(dāng)解析器遇到開始和結(jié)束標(biāo)簽時執(zhí)行哪個函數(shù)

4. 添加 xml_set_character_data_handler() 函數(shù)來定義,當(dāng)解析器遇到字符數(shù)據(jù)時執(zhí)行哪個函數(shù)

5. 通過 xml_parse() 函數(shù)來解析文件 "test.xml"

6. 萬一有錯誤的話,添加 xml_error_string() 函數(shù)把 XML 錯誤轉(zhuǎn)換為文本說明

7. 調(diào)用 xml_parser_free() 函數(shù)來釋放分配給 xml_parser_create() 函數(shù)的內(nèi)存

更多 PHP Expat 解析器的信息

如需了解更多關(guān)于 PHP Expat 函數(shù)的信息,請訪問我們的 PHP XML Parser 參考手冊。


Weiter lernen
||
<?php //初始化XML解析器 $parser=xml_parser_create(); //在元素開始時使用的函數(shù) function start($parser,$element_name,$element_attrs) { switch($element_name) { case "NOTE": echo "-- Note --<br>"; break; case "TO": echo "To: "; break; case "FROM": echo "From: "; break; case "HEADING": echo "Heading: "; break; case "BODY": echo "Message: "; } } //函數(shù)結(jié)束時使用的函數(shù) function stop($parser,$element_name) { echo "<br>"; } //查找字符數(shù)據(jù)時使用的函數(shù) function char($parser,$data) { echo $data; } //指定元素的處理 xml_set_element_handler($parser,"start","stop"); //指定數(shù)據(jù)處理程序 xml_set_character_data_handler($parser,"char"); //打開XML文件 $fp=fopen("test.xml","r"); //讀取數(shù)據(jù) while ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) or die (sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); } //釋放內(nèi)存 xml_parser_free($parser); ?>
einreichenCode zurücksetzen