内建的 Expat 剖析器使在 PHP 中处置惩罚 XML 文档成为可能。
什么是 XML?
XML 用于形貌数据,其中心是数据是什么。XML 文件形貌了数据的构造。
在 XML 中,没有预定义的标签。您必需定义本身的标签。
什么是 Expat?
如需读取和更新 - 建立并处置惩罚 - 一个 XML 文档,您须要 XML 剖析器。
有两种基础的 XML 剖析器类型:
·基于树的剖析器:这类剖析器把 XML 文档转换为树型构造。它剖析整篇文档,并供应了 API 来接见树种的元素,比方文档对象模子 (DOM)。
·基于事宜的剖析器:将 XML 文档视为一系列的事宜。当某个细致的事宜发作时,剖析器会挪用函数来处置惩罚。
Expat 剖析器是基于事宜的剖析器。
基于事宜的剖析器集合在 XML 文档的内容,而不是它们的效果。正因如此,基于事宜的剖析器可以比基于树的剖析器更快地接见数据。
请看下面的 XML 片断:
<from>John</from>
基于事宜的剖析器把上面的 XML 报告为一连串的三个事宜:
·最先元素:from
·最先 CDATA 部份, 值:John
·封闭元素: from
上面的 XML 类型包含了情势优越的 XML。不过这个例子是无效的 XML,由于没有与它关联的文档类型声明 (DTD),也没有内嵌的 DTD。
相干引荐:《php入门教程》
不过,在运用 Expat 剖析器时,这没有区分。Expat 是不搜检有效性的剖析器,疏忽任何 DTD。
作为一款基于事宜、非考证的 XML 剖析器,Expat 疾速且轻盈,非常合适 PHP 的 web 应用顺序。
诠释:XML 文档必需情势优越,不然 Expat 会生成毛病。
装置
XML Expat 剖析器是 PHP 中心的组成部份。无需装置就可以运用这些函数。
XML 文件
将在我们的例子中运用下面的 XML 文件:
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
初始化 XML 剖析器
我们要在 PHP 中初始化 XML 剖析器,为差别的 XML 事宜定义处置惩罚器,然后剖析这个 XML 文件。
例子:
<?php //Initialize the XML parser $parser=xml_parser_create(); //Function to use at the start of an element 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: "; } } //Function to use at the end of an element function stop($parser,$element_name) { echo "<br />"; } //Function to use when finding character data function char($parser,$data) { echo $data; } //Specify element handler xml_set_element_handler($parser,"start","stop"); //Specify data handler xml_set_character_data_handler($parser,"char"); //Open XML file $fp=fopen("test.xml","r"); //Read data 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))); } //Free the XML parser xml_parser_free($parser); ?>
以上代码的输出:
-- Note -- To: George From: John Heading: Reminder Message: Don't forget the meeting!
事情道理诠释:
·经由过程 xml_parser_create() 函数初始化 XML 剖析器
·建立合营差别事宜处置惩罚顺序的的函数
·增加 xml_set_element_handler() 函数来定义,当剖析器碰到最先和完毕标签时实行哪一个函数
·增加 xml_set_character_data_handler() 函数来定义,当剖析器碰到字符数据时实行哪一个函数
·经由过程 xml_parse() 函数来剖析文件 "test.xml"
·万一有毛病的话,增加 xml_error_string() 函数把 XML 毛病转换为文本申明
·挪用 xml_parser_free() 函数来开释分配给 xml_parser_create() 函数的内存
以上就是php剖析器是什么的细致内容,更多请关注ki4网别的相干文章!