• 技术文章 >后端开发 >php教程

    PHP中的XML拉模式详解_PHP教程

    2016-07-13 17:34:00原创370
      研究与 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 请求

    以下是引用片段:
    (标准化越来越近了) version="1.0"?>

    sqrt


    36.0


      下面是 php(做为现在的主流开发语言) 脚本需要完成的工作:

      1、检查方法名,如果不是 sqrt(它是该脚本懂得如何处理的惟一方法),则生成错误响应。

      2、找到参数,如果参数不存在或参数类型错误,则生成错误响应。

      3、另外,计算平方根。

      4、在表单中返回结果,如清单 2 所示。

      清单 2. xml(标准化越来越近了)-RPC 响应

    以下是引用片段:
    (标准化越来越近了) version="1.0"?>



    6.0


      下面我们逐步展开说明。

      初始化解析器并载入文档

      第一步是创建新的解析器对象。创建操作很简单:

    以下是引用片段:
    $reader = new xml(标准化越来越近了)Reader();

      接着,需要为它提供一些用于解析的数据。对于 xml(标准化越来越近了)-RPC,这是超文本传输协议(Hypertext Transfer Protocol,HTTP)请求的原始主体。然后可以将该字符串传递到读取器的 xml(标准化越来越近了)() 函数:

      填充原始发送数据

    以下是引用片段:
      $request = $HTTP_RAW_POST_DATA;
      $reader->xml(标准化越来越近了)($request);

      如果发现 $HTTP_RAW_POST_DATA 是空的,则将以下代码行添加到 php(做为现在的主流开发语言).ini 文件:

    以下是引用片段:
      always_populate_raw_post_data = On

      可以解析任何字符串,无论它是从何处获取的。例如,可以是程序中的一串文字或从本地文件读取。还可以使用 open() 函数从外部 URL 载入数据。例如,下面的语句准备解析其中一个 Atom 提要:

    以下是引用片段:
      $reader->xml(标准化越来越近了)(http://www.cafeaulait.org/today.atom);

      无论是从何处获取原始数据,现在已建立了阅读器并为解析做好准备。

      读取文档

      read() 函数使解析器前进到下一个标记。最简单的方法是在 while 循环中遍历整个文档:

    以下是引用片段:
      while ($reader->read()) {
      // processing code goes here...
      }

      完成遍历后,关闭解析器以释放它所持有的任何资源,并且重置解析器以便用于下一个文档:

    以下是引用片段:
      $reader->close();

      在循环内部,将解析器放置在特殊节点上:元素的起点、元素的终点、文本节点、注释等等。通过检查以下属性,可以发现解析器正在查看的内容:

      localName 是本地的、未带前缀的节点名。

      name 是可能的节点前缀名。对于像注释这种没有名称的节点,包括 #comment、#text、#document 等等,与 DOM 中的一样。

      namespaceURI 是节点名称空间的统一资源标识符(Uniform Resource Identifier,URI)。

      nodeType 是代表节点类型的整数 —— 例如,2 代表属性节点,7 代表处理指令。

      prefix 是节点的名称空间前缀。

      value 是节点的下一个文本内容。

      如果节点有文本值,hasValue 值为 true;否则,值为 false.

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/508532.htmlTechArticle研究与 php (做为现在的主流开发语言) 5 捆绑在一起的 xml (标准化越来越近了) Reader 库,它使 php (做为现在的主流开发语言) 页面能够以高效...

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP 中的 XML 模式 详解 研究 php 做为 在的 主流 开发 语言 捆绑 在一起 xml 标准
    上一篇:MySQL数据导入导出方法与工具介绍_PHP教程 下一篇:php递归删除目录_PHP教程
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP如何使用xlswriter进行大数据的导入导出?(详解)• Php output buffering缓存及程序缓存深入解析_PHP• 探讨PHP调用时间格式的参数详解_PHP• php session安全问题分析_PHP• PHP array_multisort()函数的使用札记_PHP
    1/1

    PHP中文网