PHP与XML.ppt
《PHP与XML.ppt》由会员分享,可在线阅读,更多相关《PHP与XML.ppt(63页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第15章 PHP与XML n n15-1 XML与PHP的基础n n15-2 PHP与DOMn n15-3 PHP与XPathn n15-4 PHP与SAXn n15-5 使用XSLT输出HTML文件n n15-6 SimpleXML15-1 XML与PHP的基础-说明n nXML程序设计就是设计应用程序来存取XML文件的架构与内容。n n程序使用XML剖析器(XML Parsers)来分析XML文件架构,以便XML应用程序可以存取XML架构和内容。15-1 XML与PHP的基础-剖析器种类n n树状基础的剖析器(树状基础的剖析器(树状基础的剖析器(树状基础的剖析器(Tree-based Pa
2、rserTree-based ParserTree-based ParserTree-based Parser):):):):将将XMLXML文件转换成树状结构,剖析器需要分析完整份文件转换成树状结构,剖析器需要分析完整份XMLXML文件后,才能建立树状结构,提供相关界面物文件后,才能建立树状结构,提供相关界面物件来存取树状结构的节点,例如:第件来存取树状结构的节点,例如:第15-215-2节的节的DOMDOM(Document Object ModelDocument Object Model)。)。n n事件基础的剖析器(事件基础的剖析器(事件基础的剖析器(事件基础的剖析器(Event-b
3、ased ParserEvent-based ParserEvent-based ParserEvent-based Parser):):):):XMLXML文件的处理如同读取文字档案的过程,在读取内文件的处理如同读取文字档案的过程,在读取内容时触发一系列事件,应用程序提供函数处理这容时触发一系列事件,应用程序提供函数处理这些事件,以便存取些事件,以便存取XMLXML内容,例如:第内容,例如:第15-415-4节的节的SAXSAX(Simple API for XMLSimple API for XML)。)。15-1 XML与PHP的基础-PHP 5与XMLn nPHP 4的DOM并不是W3
4、C标准的DOM界面物件,再加上执行效能不佳和多种扩充程序之间的沟通问题。n nPHP 5的XML功能已经全部使用libxml2函式库来改写DOM、SAX和XSLT,支援W3C标准的DOM界面物件和XPath,新增SimpleXML扩充功能,可以使用一种更简单的方式来存取XML文件。15-2 PHP与DOMn n15-2-1 DOM的基础n n15-2-2 载入与验证XML文件n n15-2-3 存取DOM的XML元素和属性n n15-2-4 在DOM走访与浏览XML元素n n15-2-5 新增XML元素和属性n n15-2-6 删除XML元素和属性15-2-1 DOM的基础-说明n nDOMD
5、OM(Document Object ModelDocument Object Model)物件模)物件模型可以将型可以将XMLXML文件转换成一棵节点(文件转换成一棵节点(NodesNodes)组)组成的树状结构,提供节点的相关属性和方法,存成的树状结构,提供节点的相关属性和方法,存取元素内容,或新增、删除和修改节点内容。取元素内容,或新增、删除和修改节点内容。n nDOMDOM属于属于XMLXML文件程序设计的标准界面物件,可文件程序设计的标准界面物件,可以将以将XMLXML文件视为树状结构的节点。文件视为树状结构的节点。n nDOMDOM是是W3CW3C的建议规格,提供各种程序语言标的建
6、议规格,提供各种程序语言标准程序设计界面的属性、方法和物件,程序设计准程序设计界面的属性、方法和物件,程序设计者能够透过者能够透过DOMDOM浏览浏览XMLXML文件、新增、删除和修文件、新增、删除和修改节点资料。改节点资料。15-2-1 DOM的基础-特点n nDOM Level 1在1998年10月1日成为W3C的标准建议规格,DOM Level 2是2000年11月,其特点如下所示:DOMDOM支援支援JavsScriptJavsScript、VBScriptVBScript、PerlPerl、Visual BasicVisual Basic、DelphiDelphi、C+C+、PHPP
7、HP和和JavaJava等程序语言。等程序语言。DOMDOM可以建立与平台和语言无关的资料架构,可以建立与平台和语言无关的资料架构,将将HTMLHTML或或XMLXML文件都使用标准的文件都使用标准的DOMDOM节点来节点来表示。表示。DOMDOM支援支援DTDDTD、XML SchemaXML Schema等等XMLXML文件验文件验证。证。15-2-1 DOM的基础-DOM界面物件n nPHPPHP程序在使用程序在使用XMLXML剖析器载入剖析器载入XMLXML文件后,就文件后,就可以使用可以使用DOMDOM界面(界面(InterfaceInterface)物件处理)物件处理XMLXML文
8、件的元素和属性,将文件的元素和属性,将XMLXML文件内容视为树文件内容视为树状结构的节点,主要的界面物件,如下表所示:状结构的节点,主要的界面物件,如下表所示:15-2-1 DOM的基础-DOM节点的树状结构n nXML剖析器在载入XML文件后,DOM将XML文件的元素视为树状结构的节点,常见节点类型的XML常数,如下表所示:15-2-1 DOM的基础-DOM节点的树状结构(图例)15-2-2 载入与验证XML文件-说明n n对于PHP的XML剖析器来说,XML文件在转换成树状结构之后,就是一个DOMDocument物件,由各种DOMNode节点物件组合成的一个物件集合。15-2-2 载入与
9、验证XML文件-载入XML文件n n在PHP程序载入XML文件是使用DOMDocument物件的方法。首先建立DOMDocument物件,如下所示:$dom=new DOMDocument();n n在设定剖析器的相关参数后,就可以载入XML文件,如下所示:$doc-preserveWhiteSpace=false;if($dom-load(book.xml)15-2-2 载入与验证XML文件-DOMDocuement物件属性n nDOMDocuement物件提供相关属性设定剖析器参数,如下表所示:15-2-2 载入与验证XML文件-验证XML文件(说明)n nXML提供文件验证机制来检查XM
10、L文件是否符合自行定义的结构、标签和属性规则,常用的验证方式有两种,如下所示:DTDDTD:DTDDTD原来是原来是SGMLSGML的语法检查,的语法检查,XML XML 1.01.0版支援版支援DTDDTD验证方式,验证方式,DTDDTD定义的规则可定义的规则可以帮助以帮助XMLXML剖析器检查剖析器检查XMLXML文件的内容。文件的内容。XML SchemaXML Schema:XML SchemaXML Schema是是W3CW3C的标的标准规格,准规格,XML SchemaXML Schema拥有很高的扩充性,可拥有很高的扩充性,可以直接扩充别人现成定义的以直接扩充别人现成定义的XML
11、 SchemaXML Schema来验来验证证XMLXML文件。文件。15-2-2 载入与验证XML文件-验证XML文件(实作)n n在PHP程序验证XML文件是呼叫validate()和schemaValidate()方法,如下所示:$dom-validate();$dom-schemaValidate(book.xsd);n n上述validate()方法是DTD验证,schemaValidate()方法是XML Schema验证,参数是XML Schema文件,验证成功传回true,错误传回false。15-2-3 存取DOM的XML元素和属性-DOMDocument文件物件n nXML
12、XML文件树状结构是文件树状结构是DOMDocumentDOMDocument物件,当物件,当DOMDOM载入载入XMLXML文件建立文件建立$dom$dom物件后,就可以使物件后,就可以使用属性取得用属性取得XMLXML文件的根节点,如下所示:文件的根节点,如下所示:$root=$dom-documentElement;$root=$dom-documentElement;n ndocumentElementdocumentElement属性是属性是XMLXML文件的根节点。文件的根节点。DOMDocumentDOMDocument物件提供方法可以直接使用标签物件提供方法可以直接使用标签名称
13、取得指定节点和其子节点,如下所示:名称取得指定节点和其子节点,如下所示:$nodes=$dom-getElementsByTagName($nodes=$dom-getElementsByTagName(book);book);n n上述指令取得所有上述指令取得所有标签的子节点,取出标签的子节点,取出的节点集合是的节点集合是DOMNodeListDOMNodeList物件。物件。15-2-3 存取DOM的XML元素和属性-DOMNode节点物件n nDOMDocumentDOMDocument物件是由物件是由DOMNodeDOMNode节点物件所节点物件所组成,在组成,在DOMNodeDOMN
14、ode物件提供相关属性和方法可物件提供相关属性和方法可以取得以取得XMLXML元素的名称和内容,如下所示:元素的名称和内容,如下所示:$root=$dom-documentElement;$root=$dom-documentElement;echo echo 根元素根元素:.$root-:.$root-nodeName.;nodeName.;n nnodeNamenodeName属性可以取得节点名称。属性可以取得节点名称。DOMNodeDOMNode物件提供物件提供childNodeschildNodes属性取得这些子节点的属性取得这些子节点的DOMNodeListDOMNodeList物件
15、,如下所示:物件,如下所示:$nodes=$root-childNodes;$nodes=$root-childNodes;15-2-3 存取DOM的XML元素和属性-DOMNode节点物件属性n nDOMNode节点物件的相关属性说明,如下表所示:15-2-3 存取DOM的XML元素和属性-取得节点名称和值n n例如:取得根节点的节点名称和值,如下所示:例如:取得根节点的节点名称和值,如下所示:$root-nodeName;$root-nodeName;iconv(utf-8,big5,$root-nodeValue);iconv(utf-8,big5,$root-nodeValue);n
16、n程序码取得根节点的名称和值,属性值需要使用程序码取得根节点的名称和值,属性值需要使用iconviconv()()函数,将函数,将utf-8utf-8的编码转换成的编码转换成big5big5编码。编码。n n因为因为DOMNodeDOMNode节点物件还能拥有其他子节点,节点物件还能拥有其他子节点,所以所以DOMNodeDOMNode节点物件提供节点物件提供hasChildNodes()hasChildNodes()方法检查节点是否拥有子节点,如下所示:方法检查节点是否拥有子节点,如下所示:if($node-hasChildNodes().if($node-hasChildNodes().15
17、-2-3 存取DOM的XML元素和属性-节点种类n nnodeType节点属性值是前述的XML常数,不同节点种类影响相关的属性值,常见的节点种类如下表所示:15-2-3 存取DOM的XML元素和属性-DOMElement元素物件n nDOMElementDOMElement物件代表树状结构的物件代表树状结构的XMLXML元素节点,元素节点,这也是一种这也是一种DOMNodeDOMNode物件,如果元素拥有内容,物件,如果元素拥有内容,文字内容是文字内容是DOMTextDOMText节点,节点,DOMElementDOMElement物件物件的属性的属性tagNametagName可以取得标签名
18、称,如下所示:可以取得标签名称,如下所示:$eles=$dom-getElementsByTagName($eles=$dom-getElementsByTagName(book);book);foreach($eles as$ele)foreach($eles as$ele)echo$ele-tagName.;echo$ele-tagName.;n n程序码在取得程序码在取得bookbook所有所有DOMElementDOMElement元素物件元素物件后,使用后,使用foreachforeach循环和循环和tagNametagName属性取得标签属性取得标签名称。名称。15-2-3 存取D
19、OM的XML元素和属性-DOMElement元素属性n n如果如果DOMElementDOMElement元素拥有属性,我们可以呼叫元素拥有属性,我们可以呼叫hasAttributeshasAttributes()()方法检查是否有属性,方法检查是否有属性,getAttribute()getAttribute()方法取方法取得得XMLXML元素的属性值,如下所示:元素的属性值,如下所示:if($ele-hasAttributes()if($ele-hasAttributes()echo sales echo sales属性值属性值:.:.$ele-getAttribute(sales).-;$
20、ele-getAttribute(sales).-;n nif if条件判断是否有属性,如果有,就可以取得元素条件判断是否有属性,如果有,就可以取得元素指定的指定的salessales属性值。属性值。15-2-3 存取DOM的XML元素和属性-DOMText内容节点物件n nDOMText物件指的是XML元素的文字内容。15-2-3 存取DOM的XML元素和属性-DOMNamedNodeMap属性清单物件n nXMLXML元素可能拥有多个属性,元素可能拥有多个属性,PHPPHP程序可以使用程序可以使用DOMElementDOMElement物件的物件的attributesattributes属
21、性取得所有属属性取得所有属性的性的DOMNamedNodeMapDOMNamedNodeMap物件,如下所示:物件,如下所示:$atts=$node-attributes;$atts=$node-attributes;foreach($atts as$att)foreach($atts as$att)$v=iconv(utf-8,big5,$att-$v=iconv(utf-8,big5,$att-nodeValue);nodeValue);echo(.$att-NodeName./.echo(.$att-NodeName./.$v.);$v.);n n上述程序码在使用上述程序码在使用attr
22、ibutesattributes属性取得属性清单属性取得属性清单后,使用后,使用foreachforeach循环取得所有属性名称和值。循环取得所有属性名称和值。15-2-4 在DOM走访与浏览XML元素-说明n nDOMNodeDOMNode节点物件提供多种属性,可以在节点物件提供多种属性,可以在DOMDOM树状节点中,走访与浏览指定树状节点中,走访与浏览指定XMLXML元素,如下:元素,如下:$node=$node=$root-firstChild-nextSibling-firstChild;$root-firstChild-nextSibling-firstChild;echo$node
23、-nodeName./.echo$node-nodeName./.$node-nodeValue.;$node-nodeValue.;n n程序码取得根节点程序码取得根节点$root$root后,使用后,使用firstChildfirstChild属性属性走到下一层的第走到下一层的第1 1个个bookbook元素,元素,nextSiblingnextSibling属性属性走到第走到第2 2个个bookbook元素,再一次元素,再一次firstChildfirstChild属性,就属性,就是走到第是走到第2 2个个bookbook元素的第元素的第1 1个个codecode子元素,也子元素,也就是
24、第就是第2 2个个codecode元素。元素。15-2-4 在DOM走访与浏览XML元素-相关属性n nDOMNode节点物件关于走访与浏览XML文件的相关属性说明,如下表所示:15-2-5 新增XML元素和属性-步骤一:建立节点物件(方法)n n在新增XML元素和属性前,我们需要使用DOMDocument物件方法建立所需的节点物件,常用方法如下表所示:15-2-5 新增XML元素和属性-步骤一:建立节点物件(范例)n n例如:在PHP程序建立price节点物件,如下所示:$price=$dom-createElement(price);$price=$dom-createElement(pr
25、ice);n n在建立price节点$price后,我们还需要建立标签内容的文字节点$text,如下所示:$text=$dom-createTextNode(580);$text=$dom-createTextNode(580);15-2-5 新增XML元素和属性-步骤二:新增元素的内容(方法)n n在建立好节点物件后,就可以使用DOMNode节点方法将节点新增到树状结构之中,相关方法的说明,如下表所示:15-2-5 新增XML元素和属性-步骤二:新增元素的内容(范例)n n所谓新增元素的内容,就是新增文字子节点。例如:将$text文字节点新增成为$price节点的子节点,如下所示:$pric
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PHP XML
限制150内