使用 DOM 库读取 XML

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

  图 1. 图书 XML XML DOM


  树顶部的 books 节点有两个 book 子标记。在每本书中,有 authorpublisher title 几个节点。authorpublisher 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 方法获得 authorpublisher title 标记的 nodeValuenodeValue 是节点中的文本。脚本然后显示这些值。

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

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

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

 

SAX 解析器读取 XML

 

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

 

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