php和xml.docx
《php和xml.docx》由会员分享,可在线阅读,更多相关《php和xml.docx(9页珍藏版)》请在冰豆网上搜索。
![php和xml.docx](https://file1.bdocx.com/fileroot1/2022-12/1/c86bd9bb-d9b4-41c2-a035-6ce7e7157d00/c86bd9bb-d9b4-41c2-a035-6ce7e7157d001.gif)
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参考手册。