php和xml.docx

上传人:b****5 文档编号:4525119 上传时间:2022-12-01 格式:DOCX 页数:9 大小:17.92KB
下载 相关 举报
php和xml.docx_第1页
第1页 / 共9页
php和xml.docx_第2页
第2页 / 共9页
php和xml.docx_第3页
第3页 / 共9页
php和xml.docx_第4页
第4页 / 共9页
php和xml.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

php和xml.docx

《php和xml.docx》由会员分享,可在线阅读,更多相关《php和xml.docx(9页珍藏版)》请在冰豆网上搜索。

php和xml.docx

php和xml

一、PHPXMLExpat解析器

内建的Expat解析器使在PHP中处理XML文档成为可能。

什么是XML?

XML用于描述数据,其焦点是数据是什么。

XML文件描述了数据的结构。

在XML中,没有预定义的标签。

您必须定义自己的标签。

如果希望学习更多有关XML的内容,请访问我们的XML教程。

什么是Expat?

如需读取和更新-创建创建并处理-一个XML文档,您需要XML解析器。

有两种基本的XML解析器类型:

∙基于树的解析器:

这种解析器把XML文档转换为树型结构。

它分析整篇文档,并提供了API来访问树种的元素,例如文档对象模型(DOM)。

∙基于事件的解析器:

将XML文档视为一系列的事件。

当某个具体的事件发生时,解析器会调用函数来处理。

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

基于事件的解析器集中在XML文档的内容,而不是它们的结果。

正因如此,基于事件的解析器能够比基于树的解析器更快地访问数据。

请看下面的XML片段:

John

基于事件的解析器把上面的XML报告为一连串的三个事件:

∙开始元素:

from

∙开始CDATA部分,值:

John

∙关闭元素:

from

上面的XML范例包含了形式良好的XML。

不过这个例子是无效的XML,因为没有与它关联的文档类型声明(DTD),也没有内嵌的DTD。

不过,在使用Expat解析器时,这没有区别。

Expat是不检查有效性的解析器,忽略任何DTD。

作为一款基于事件、非验证的XML解析器,Expat快速且轻巧,十分适合PHP的web应用程序。

注释:

XML文档必须形式良好,否则Expat会生成错误。

安装

XMLExpat解析器是PHP核心的组成部分。

无需安装就可以使用这些函数。

XML文件

将在我们的例子中使用下面的XML文件:

xmlversion="1.0"encoding="ISO-8859-1"?

>

George

John

Reminder

Don'tforgetthemeeting!

初始化XML解析器

我们要在PHP中初始化XML解析器,为不同的XML事件定义处理器,然后解析这个XML文件。

例子

php

//InitializetheXMLparser

$parser=xml_parser_create();

//Functiontouseatthestartofanelement

functionstart($parser,$element_name,$element_attrs)

{

switch($element_name)

{

case"NOTE":

echo"--Note--
";

break;

case"TO":

echo"To:

";

break;

case"FROM":

echo"From:

";

break;

case"HEADING":

echo"Heading:

";

break;

case"BODY":

echo"Message:

";

}

}

//Functiontouseattheendofanelement

functionstop($parser,$element_name)

{

echo"
";

}

//Functiontousewhenfindingcharacterdata

functionchar($parser,$data)

{

echo$data;

}

//Specifyelementhandler

xml_set_element_handler($parser,"start","stop");

//Specifydatahandler

xml_set_character_data_handler($parser,"char");

//OpenXMLfile

$fp=fopen("test.xml","r");

//Readdata

while($data=fread($fp,4096))

{

xml_parse($parser,$data,feof($fp))or

die(sprintf("XMLError:

%satline%d",

xml_error_string(xml_get_error_code($parser)),

xml_get_current_line_number($parser)));

}

//FreetheXMLparser

xml_parser_free($parser);

?

>

以上代码的输出:

--Note--

To:

George

From:

John

Heading:

Reminder

Message:

Don'tforgetthemeeting!

工作原理解释:

∙通过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()函数的内存

更多PHPExpat解析器的信息

如需更多有关PHPExpat函数的信息,请访问我们的PHPXMLParser参考手册。

二、PHPXMLDOM

内建的DOM解析器使在PHP中处理XML文档成为可能。

什么是DOM?

W3CDOM提供了针对HTML和XML文档的标准对象集,以及用于访问和操作这些文档的标准接口。

W3CDOM被分为不同的部分(Core,XML和HTML)和不同的级别(DOMLevel1/2/3):

∙CoreDOM-为任何结构化文档定义标准的对象集

∙XMLDOM-为XML文档定义标准的对象集

∙HTMLDOM-为HTML文档定义标准的对象集

如果您希望学习更多有关XMLDOM的知识,请访问我们的XMLDOM教程。

XML解析

如需读取和更新-创建创建并处理-一个XML文档,您需要XML解析器。

有两种基本的XML解析器类型:

∙基于树的解析器:

这种解析器把XML文档转换为树型结构。

它分析整篇文档,并提供了API来访问树种的元素,例如文档对象模型(DOM)。

∙基于事件的解析器:

将XML文档视为一系列的事件。

当某个具体的事件发生时,解析器会调用函数来处理。

DOM解析器是基于树的解析器。

请看下面的XML文档片段:

xmlversion="1.0"encoding="ISO-8859-1"?

>

John

XMLDOM把XML视为一个树形结构:

∙Level1:

XML文档

∙Level2:

根元素:

∙Level3:

文本元素:

"John"

安装

DOMXML解析器函数是PHP核心的组成部分。

无需安装就可以使用这些函数。

XML文件

将在我们的例子中使用下面的XML文件:

xmlversion="1.0"encoding="ISO-8859-1"?

>

George

John

Reminder

Don'tforgetthemeeting!

加载和输出XML

我们需要初始化XML解析器,加载XML,并把它输出:

例子

php

$xmlDoc=newDOMDocument();

$xmlDoc->load("note.xml");

print$xmlDoc->saveXML();

?

>

以上代码的输出:

GeorgeJohnReminderDon'tforgetthemeeting!

假如您在浏览器窗口中查看源代码,会看到下面这些HTML:

xmlversion="1.0"encoding="ISO-8859-1"?

>

George

John

Reminder

Don'tforgetthemeeting!

上面的例子创建了一个DOMDocument-Object,并把"note.xml"中的XML载入这个文档对象中。

saveXML()函数把内部XML文档放入一个字符串,这样我们就可以输出它。

循环XML

我们要初始化XML解析器,加载XML,并循环元素的所有元素:

例子

php

$xmlDoc=newDOMDocument();

$xmlDoc->load("note.xml");

$x=$xmlDoc->documentElement;

foreach($x->childNodesAS$item)

{

print$item->nodeName."=".$item->nodeValue."
";

}

?

>

以上代码的输出:

#text=

to=George

#text=

from=John

#text=

heading=Reminder

#text=

body=Don'tforgetthemeeting!

#text=

在上面的例子中,您看到了每个元素之间存在空的文本节点。

当XML生成时,它通常会在节点之间包含空白。

XMLDOM解析器把它们当作普通的元素,如果您不注意它们,有时会产生问题。

如果您希望学习更多有关XMLDOM的知识,请访问我们的XMLDOM教程。

三、PHPSimpleXML

SimpleXML处理最普通的XML任务,其余的任务则交由其它扩展。

什么是SimpleXML?

SimpleXML是PHP5中的新特性。

在了解XML文档layout的情况下,它是一种取得元素属性和文本的便利途径。

与DOM或Expat解析器相比,SimpleXML仅仅用几行代码就可以从元素中读取文本数据。

SimpleXML可把XML文档转换为对象,比如:

∙元素-被转换为SimpleXMLElement对象的单一属性。

当同一级别上存在多个元素时,它们会被置于数组中。

∙属性-通过使用关联数组进行访问,其中的下标对应属性名称。

∙元素数据-来自元素的文本数据被转换为字符串。

如果一个元素拥有多个文本节点,则按照它们被找到的顺序进行排列。

当执行类似下列的基础任务时,SimpleXML使用起来非常快捷:

∙读取XML文件

∙从XML字符串中提取数据

∙编辑文本节点或属性

不过,在处理高级XML时,比如命名空间,最好使用Expat解析器或XMLDOM。

安装

从PHP5.0开始,SimpleXML函数是PHP核心的组成部分。

无需安装就可以使用这些函数。

使用SimpleXML

下面是XML文件:

xmlversion="1.0"encoding="ISO-8859-1"?

>

George

John

Reminder

Don'tforgetthemeeting!

我们打算从上面的XML文件输出元素的名称和数据。

这是需要做的事情:

1.加载XML文件

2.取得第一个元素的名称

3.使用children()函数创建在每个子节点上触发的循环

4.输出每个子节点的元素名称和数据

例子

php

$xml=simplexml_load_file("test.xml");

echo$xml->getName()."
";

foreach($xml->children()as$child)

{

echo$child->getName().":

".$child."
";

}

?

>

以上代码的输出:

note

to:

George

from:

John

heading:

Reminder

body:

Don'tforgetthemeeting!

更多有关PHPSimpleXML的信息

如需更多有关PHPSimpleXML的信息,请访问我们的PHPSimpleXML参考手册。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1