用PHP读取和编写XML DOM2

 


  使用 DOM 库读取 XML

  读取格式良好的 XML 文件最容易的方式是使用编译成某些 PHP 安装的文档对象模型 (DOM)库。DOM 库把整个 XML 文档读入内存,并用节点树表示它,如图 1 所示。

  图 1. 图书 XML 的 XML DOM 树


  树顶部的 books 节点有两个 book 子标记。在每本书中,有 author、publisher 和 title 几个节点。author、publisher 和 title 节点分别有包含文本的文本子节点。

  读取图书 XML 文件并用 DOM 显示内容的代码如清单 2 所示。

  清单 2. 用 DOM 读取图书 XML

 

  <?php

  $doc = new DOMDocument();

  $doc->load( 'books.xml' );

  

  $books = $doc->getElementsByTagName( "book" );

  foreach( $books as $book )

  {

  $authors = $book->getElementsByTagName( "author" );

  $author = $authors->item(0)->nodeValue;

  

  $publishers = $book->getElementsByTagName( "publisher" );

  $publisher = $publishers->item(0)->nodeValue;

  

  $titles = $book->getElementsByTagName( "title" );

  $title = $titles->item(0)->nodeValue;

  

  echo "$title - $author - $publisher\n";

  }

  ?>

 


  脚本首先创建一个 new DOMdocument 对象,用 load 方法把图书 XML 装入这个对象。之后,脚本用 getElementsByName 方法得到指定名称下的所有元素的列表。

  在 book 节点的循环中,脚本用 getElementsByName 方法获得 author、publisher 和 title 标记的 nodeValue。nodeValue 是节点中的文本。脚本然后显示这些值。

  可以在命令行上像这样运行 PHP 脚本:

% php e1.php
PHP Hacks - Jack Herrington - O'Reilly
Podcasting Hacks - Jack Herrington - O'Reilly
%

  可以看到,每个图书块输出一行。这是一个良好的开始。但是,如果不能访问 XML DOM 库该怎么办?

 

SAX 解析器读取 XML

 

  读取 XML 的另一种方法是使用 XML Simple API(SAX)解析器。PHP 的大多数安装都包含 SAX 解析器。SAX 解析器运行在回调模型上。每次打开或关闭一个标记时,或者每次解析器看到文本时,就用节点或文本的信息回调用户定义的函数。

 

SAX 解析器的优点是,它是真正轻量级的。解析器不会在内存中长期保持内容,所以可以用于非常巨大的文件。缺点是编写 SAX 解析器回调是件非常麻烦的事。清单 3 显示了使用 SAX 读取图书 XML 文件并显示内容的代码。

posted @ 2013-01-22 10:02  最轻  阅读(128)  评论(0编辑  收藏  举报