搜索
首页后端开发php教程用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>就可以了而且如果想把一个类别移动到另一个地方的话我们只要将这一部分的subctrl-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);

?>

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何使PHP应用程序更快如何使PHP应用程序更快May 12, 2025 am 12:12 AM

tomakephpapplicationsfaster,关注台词:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

PHP性能优化清单:立即提高速度PHP性能优化清单:立即提高速度May 12, 2025 am 12:07 AM

到ImprovephPapplicationspeed,关注台词:1)启用opcodeCachingwithapCutoredUcescriptexecutiontime.2)实现databasequerycachingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandredececonnection.4 limitsclection.4.4

PHP依赖注入:提高代码可检验性PHP依赖注入:提高代码可检验性May 12, 2025 am 12:03 AM

依赖注入(DI)通过显式传递依赖关系,显着提升了PHP代码的可测试性。 1)DI解耦类与具体实现,使测试和维护更灵活。 2)三种类型中,构造函数注入明确表达依赖,保持状态一致。 3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

PHP性能优化:数据库查询优化PHP性能优化:数据库查询优化May 12, 2025 am 12:02 AM

databasequeryOptimizationinphpinvolVolVOLVESEVERSEVERSTRATEMIESOENHANCEPERANCE.1)SELECTONLYNLYNESSERSAYCOLUMNSTORMONTOUMTOUNSOUDSATATATATATATATATATATRANSFER.3)

简单指南:带有PHP脚本的电子邮件发送简单指南:带有PHP脚本的电子邮件发送May 12, 2025 am 12:02 AM

phpisusedforsenderemailsduetoitsbuilt-inmail()函数andsupportiveLibrariesLikePhpMailerandSwiftMailer.1)usethemail()functionforbasicemails,butithasimails.2)butithasimimitations.2)

PHP性能:识别和修复瓶颈PHP性能:识别和修复瓶颈May 11, 2025 am 12:13 AM

PHP性能瓶颈可以通过以下步骤解决:1)使用Xdebug或Blackfire进行性能分析,找出问题所在;2)优化数据库查询并使用缓存,如APCu;3)使用array_filter等高效函数优化数组操作;4)配置OPcache进行字节码缓存;5)优化前端,如减少HTTP请求和优化图片;6)持续监控和优化性能。通过这些方法,可以显着提升PHP应用的性能。

PHP的依赖注入:快速摘要PHP的依赖注入:快速摘要May 11, 2025 am 12:09 AM

依赖性注射(DI)InphpisadesignPatternthatManages和ReducesClassDeptions,增强量产生性,可验证性和Maintainability.itallowspasspassingDepentenciesLikEdenceSeconnectionSeconnectionStoclasseconnectionStoclasseSasasasasareTers,interitationApertatingAeseritatingEaseTestingEasingEaseTeStingEasingAndScalability。

提高PHP性能:缓存策略和技术提高PHP性能:缓存策略和技术May 11, 2025 am 12:08 AM

cachingimprovesphpermenceByStorcyResultSofComputationsorqucrouctationsorquctationsorquickretrieval,reducingServerLoadAndenHancingResponsetimes.feftectivestrategiesinclude:1)opcodecaching,whereStoresCompiledSinmememorytssinmemorytoskipcompliation; 2)datacaching datacachingsingMemccachingmcachingmcachings

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器