|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
也得学会了PHP。然后再学,见异思迁是最不可取的,狗熊掰玉米就是这个道理,如果经常中途放弃,只能是一无所获,还浪费了N多的时间和经历,得不偿失,最重要的是,你会被别人瞧不起。 研讨与 php(做为如今的主流开辟言语) 5 绑缚在一同的 xml(尺度化愈来愈近了)Reader 库,它使 php(做为如今的主流开辟言语) 页面可以以高效的流形式来处置 xml(尺度化愈来愈近了) 文档。
php(做为如今的主流开辟言语) 5 引入了新的类 xml(尺度化愈来愈近了)Reader,用于读取可扩大标志言语(Extensible Markup Language,xml(尺度化愈来愈近了))。与 Simplexml(尺度化愈来愈近了) 或文档对象模子(Document Object Model,DOM)分歧,xml(尺度化愈来愈近了)Reader 以流形式停止操作。即它从头至尾读取文档。在文档前面的内容编译完成之前,可以先处置已编译好的文档后面的内容,从而完成十分疾速、十分高效、十分节俭地利用内存。需求处置的文档越大,这个特色就更加主要。
libxml(尺度化愈来愈近了)
这里所说的 xml(尺度化愈来愈近了)Reader API 位于 Gnome Project 顶用于 C 和 C++ 的 libxml(尺度化愈来愈近了) 库之上。实践上 xml(尺度化愈来愈近了)Reader 只是在 libxml(尺度化愈来愈近了) 的 xml(尺度化愈来愈近了)TextReader API 之上的很薄的 php(做为如今的主流开辟言语) 层。xml(尺度化愈来愈近了)TextReader 自己是仿照 .NET 的 xml(尺度化愈来愈近了)TextReader 类和 xml(尺度化愈来愈近了)Reader 类,虽然其实不具有与这些类类似的代码。
与 Simple API for xml(尺度化愈来愈近了) (SAX) 分歧,xml(尺度化愈来愈近了)Reader 是推解析器,而不是拉解析器。这意味着法式是可以掌握的。您将告知解析器什么时候获得下一个文档片断,而不是在解析器看到文档后告知您所看到的内容。您将恳求内容,而不是对内容停止反响。从另外一个角度来思索这个成绩:xml(尺度化愈来愈近了)Reader 是 Iterator 设计形式的完成,而不是 Observer 设计形式的完成。
示例成绩
先从复杂例子入手下手会商。假定正在编写 php(做为如今的主流开辟言语) 剧本,用来吸收 xml(尺度化愈来愈近了)-RPC 恳求并生成呼应。更详细一些,假定恳求如清单 1 所示。文档的根元素是 methodCall,它包括 methodName 元素和 params 元素。办法的称号是 sqrt.params 元素包括一个 param 元素,param 元素包括 double,double 的平方根是但愿失掉的值。没有利用称号空间。
清单 1. xml(尺度化愈来愈近了)-RPC 恳求
- [b]以下是援用片断:
- [/b]<?xml(尺度化愈来愈近了) version="1.0"?>
- <methodCall>
- <methodName>sqrt</methodName>
- <params>
- <param>
- <value><double>36.0</double></value>
- </param>
- </params>
- </methodCall>
复制代码
上面是 php(做为如今的主流开辟言语) 剧本需求完成的任务:
1、反省办法名,假如不是 sqrt(它是该剧本晓得若何处置的唯一办法),则生成毛病呼应。
2、找到参数,假如参数不存在或参数类型毛病,则生成毛病呼应。
3、别的,盘算平方根。
4、在表单中前往了局,如清单 2 所示。
清单 2. xml(尺度化愈来愈近了)-RPC 呼应
- [b]以下是援用片断:
- [/b]<?xml(尺度化愈来愈近了) version="1.0"?>
- <methodResponse>
- <params>
- <param>
- <value><double>6.0</double></value>
- </param>
- </params>
- </methodResponse>
复制代码
上面咱们慢慢睁开申明。
初始化解析器并载入文档
第一步是创立新的解析器对象。创立操作很复杂:
- [b]以下是援用片断:
- [/b]$reader = new xml(尺度化愈来愈近了)Reader();
复制代码
接着,需求为它供应一些用于解析的数据。关于 xml(尺度化愈来愈近了)-RPC,这是超文本传输协定(Hypertext Transfer Protocol,HTTP)恳求的原始主体。然后可以将该字符串传递到读取器的 xml(尺度化愈来愈近了)() 函数:
填充原始发送数据
- [b]以下是援用片断:
- [/b] $request = $HTTP_RAW_POST_DATA;
- $reader->xml(尺度化愈来愈近了)($request);
复制代码
假如发明 $HTTP_RAW_POST_DATA 是空的,则将以下代码行添加到 php(做为如今的主流开辟言语).ini 文件:
- [b]以下是援用片断:
- [/b] always_populate_raw_post_data = On
复制代码
可以解析任何字符串,不管它是从何处获得的。例如,可所以法式中的一串文字或从当地文件读取。还可使用 open() 函数从内部 URL 载入数据。例如,上面的语句筹办解析个中一个 Atom 提纲:
- [b]以下是援用片断:
- [/b] $reader->xml(尺度化愈来愈近了)('http://www.cafeaulait.org/today.atom');
复制代码
不管是从何处获得原始数据,如今已创立了浏览器并为解析做好筹办。
读取文档
read() 函数使解析器行进到下一个标志。最复杂的办法是在 while 轮回中遍历全部文档:
- [b]以下是援用片断:
- [/b] while ($reader->read()) {
- // processing code goes here...
- }
复制代码
完成遍历后,封闭解析器以释放它所持有的任何资本,而且重置解析器以便用于下一个文档:
- [b]以下是援用片断:
- [/b] $reader->close();
复制代码
在轮回外部,将解析器放置在特别节点上:元素的出发点、元素的起点、文本节点、正文等等。经由过程反省以上司性,可以发明解析器正在检查的内容:
localName 是当地的、未带前缀的节点名。
name 是能够的节点前缀名。关于像正文这类没着名称的节点,包含 #comment、#text、#document 等等,与 DOM 中的一样。
namespaceURI 是节点称号空间的一致资本标识符(Uniform Resource Identifier,URI)。
nodeType 是代表节点类型的整数 ―― 例如,2 代表属性节点,7 代表处置指令。
prefix 是节点的称号空间前缀。
value 是节点的下一个文本内容。
假如节点有文本值,hasValue 值为 true;不然,值为 false.
应该大致熟悉了一些学习过程,也许我的过程和你的有些出路,但是不管怎么样是殊途同归,我写这么多,也只是给大家一个借鉴的机会,至于好与不好,默默不敢打包票^0^ |
|