用PHP&XML编制迷你搜索引擎(一)_PHP
一、认识XML
大家可能对XML还很陌生,我这里不想系统的讲解XML为何许物也,我只是对本文用到的一些概念进行一些介绍,如果您已经使用过XML,哪怕是初学者。您也可以跳过这章。
谈起XML,我不妨先给您一段我们熟悉的html的代码。
(1) html>
(2) title>page title/title>
(3) body>
(4) p>center>font color="red">TEXT/font>/center>/p>
(5) a href="www.yahoo.com">img src="yahoo.gif"/>/a>
(6) /body>
(7) /html>
上面这段代码从结构上就可以符合XML的规则。
他符合下面几个特点
1、引用同一个元素的时候,使用一致的大小写如center>/Center>就是不符合规定的
2、任何属性值(如 href="????")要用"" 扩起来如a href=www.yahoo.com>就是不正确的
3、所有元素必须由打开和关闭>标注组成,元素应该形如body>/body>、或空元素img ... />
请注意结尾的 /> 少了/就是错误的代码
4、所有元素必须彼此嵌套,就像写程序的循环一样,而且,所有的元素必须嵌套于根元素之中如上面的代码所有的内容都嵌套于html>/html>之中。
5、元素名称(即上面的body a p img等)应为字母开头,其实,最好就是一个英文单词,请注意大小写。
怎么样,XML不是太烦吧,你可以理解为他是一个很好的包含数据的树形的结构类型。
好了,大家来熟悉一下我们程序中用到的那个XML吧。
links>网络狂飙之谜你搜索引擎采用PHP和XML技术构建
web memo="memo1" url="">name1/web>
sub>电脑网络
web memo="nemo2">name2/web>
sub>程序设计语言
web memo="memo3">name3/web>
sub>PHP
web url="http://www.phpbuilder.com/" memo="[英文]PHP开发资源。">
www.phpbuilder.com/web>
web url="http://www.fokus.gmd.de" memo="[英文]PHP开发手册。 ">
PHP Manual
其实,它的结构相当简单,根元素就是links,sub代表着一个类别,web就是一个网站的信息,其中包含着属性,url代表网站的联接,memo为备注信息,
在第1行加上 (没有会出错)另存为xyz.xml,用IE5以上的浏览器打开看看。
怎么样,他的树形的结构一览无余。
那么我们的mini的搜索引擎为什么要使用他呢。第一个原因就是我在奥索网还不能使用mysql(真惭愧),其次,对于小数据量的搜索引擎来说,它的数据量很小,如果用数据库来做,效率未必有多高。最重要的一点是,他维护起来相当的简单,减少了人力,并且不用编写繁琐的数据库的维护的程序,例如,我们要添加一个类别或者网页,只要编辑文本的文件,加上一个web>???/web>或是sub>????/sub>就可以了,而且,如果想把一个类别移动到另一个地方的话,我们只要将这一部分的sub,ctrl-x,ctrl-v不就行了(树形结构吗)。
其实,XML的功能我只用到了一点的皮毛,以后,我会奉献给大家更深入的文章。
二、PHP如何解析XML
注:本章的内容借鉴自网易虚拟社区(我懒得敲了),加以修改。
XML解析器的两种基本类型:
基于树型的解析器:将XML文档转换成树型结构。这类解析器分析整篇文章,同时提供一个API来访问所产生树的每个元素。其通用的标准为DOM(文档对象模式)。 使用过Javascript可能用过XMLDOM。
基于事件的解析器:将XML文档视为一系列的事件。当一个特殊事件发生时,解析器将调用开发者提供的函数来处理。
基于事件的解析器有一个XML文档的数据集中视图,也就是说它集中在XML文档的数据部分,而不是其结构。这些解析器从头到尾处理文档,并将类似于-元素的开始、元素的结尾、特征数据的开始等等-事件通过回调(callback)函数报告
给应用程序。以下是一个"Hello-World"的XML文档范例:
greeting>
Hello World
/greeting>
基于事件的解析器将报告为三个事件:
开始元素:greeting
CDATA项的开始,值为:Hello World
结束元素:greeting
不像基于树型的解析器,基于事件的解析器不产生描述文档的结构。在CDATA项中,基于事件的解析器不会让你得到父元素greeting的信息。
然而,它提供一个更底层的访问,这就使得可以更好地利用资源和更快地访问。通过这种方式,就没有必要将整个文档放入内存;而事实上,整个文档甚至可以大于实际内存值。
准备
用于产生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() 其它没有指定处理函数的事件
所有的回调函数必须将解析器的实例作为其第一个参数(此外还有其它参数)。
更详细的说明可以参见PHP的说明。
下列用来显示 XML 元素结构 (Element Structure)
下面的范例摘自PHP手册范例,
他是我们的搜索引擎的基本结构,但是,我就不加以注释了,因为,我们下一章将会介绍。
$file = "data.xml";
$depth = array();
function startElement($parser, $name, $attrs)
{
global $depth;
for ($i = 0; $i $depth[$parser]; $i++) {
print " ";
}
print "$name
";
$depth[$parser]++;
}
function endElement($parser, $name, $attrs)
{
global $depth;
$depth[$parser]--;
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
if (!($fp = fopen($file, "r"))) {
die("could not open XML input");
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);
?>

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Oracle錯誤3114詳解:如何快速解決,需要具體程式碼範例在Oracle資料庫開發與管理過程中,我們常常會遇到各種各樣的錯誤,其中錯誤3114是比較常見的一個問題。錯誤3114通常表示資料庫連線出現問題,可能是網路故障、資料庫服務停止、或連接字串設定不正確等原因導致的。本文將詳細解釋錯誤3114的產生原因,以及如何快速解決這個問題,並附上具體的程式碼

Wormhole在區塊鏈互通性方面處於領先地位,專注於創建有彈性、面向未來的去中心化系統,優先考慮所有權、控制權和無需許可的創新。這個願景的基礎是對技術專業知識、道德原則和社群一致性的承諾,旨在以簡單、清晰和廣泛的多鏈解決方案套件重新定義互通性格局。隨著零知識證明、擴容方案和功能豐富的Token標準的興起,區塊鏈變得更加強大,而互通性也變得越來越重要。在這個不斷創新的應用程式環境中,新穎的治理系統和實用功能為整個網路的資產帶來了前所未有的機會。協議建構者現在正在努力思考如何在這個新興的多鏈

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

【PHP中點的意義和用法解析】在PHP中,中點(.)是常用的運算符,用來連接兩個字串或物件的屬性或方法。在本文中,我們將深入探討PHP中點的意義和用法,並透過具體的程式碼範例加以說明。 1.連接字串中點運算子.在PHP中最常見的用法是連接兩個字串。透過將.放置在兩個字串之間,可以將它們拼接在一起,形成一個新的字串。 $string1=&qu

使用PHPXML函數處理XML資料:解析XML資料:simplexml_load_file()和simplexml_load_string()載入XML檔案或字串。存取XML資料:利用SimpleXML物件的屬性和方法來取得元素名稱、屬性值和子元素。修改XML資料:使用addChild()和addAttribute()方法新增元素和屬性。序列化XML資料:asXML()方法將SimpleXML物件轉換為XML字串。實戰案例:解析產品饋送XML,提取產品信息,轉換並將其儲存到資料庫中。

由於篇幅限制,以下是一個簡短的文章:Apache2是常用的Web伺服器軟體,而PHP是廣泛使用的伺服器端腳本語言。在建置網站過程中,有時會遇到Apache2無法正確解析PHP檔案的問題,導致PHP程式碼無法執行。這種問題通常是因為Apache2沒有正確配置PHP模組,或是PHP模組與Apache2的版本不相容所導致的。解決這個問題的方法一般有兩種,一種是

Win11新功能解析:跳過登入微軟帳號的方法隨著Windows11的發布,許多用戶發現其帶來了更多的便利性和新功能。然而,有些用戶可能不喜歡將其係統與微軟帳戶綁定,希望跳過這一步驟。本文將介紹一些方法,幫助使用者在Windows11中跳過登入微軟帳戶,並實現更私密、更自主的使用體驗。首先,讓我們來了解為什麼有些用戶不願意登入微軟帳號。一方面,一些用戶擔心他們

谷歌瀏覽器怎麼更換搜尋引擎?谷歌瀏覽器是一款很受用戶歡迎的瀏覽器,它不僅擁有簡單易上手的服務、實用的工具等輔助功能,能夠滿足不同用戶的不同需求,搜尋引擎一般都是默認谷歌,如果我們想要更換該怎麼設定呢?下面小編就來分享一下方法吧。 更換方法 1、點選開啟Google瀏覽器。 2、點選三點圖示開啟選單介面。 3、點選設定選項可以進入到瀏覽器的設定介面中。 4、在設定介面找到搜尋引擎模組。 5、點選管理搜尋引擎按鈕。 6、可以看到一個新增按鈕,點選這個新增按鈕可以新增搜尋引擎。
