Chinaunix首页 | 论坛 | 博客
  • 博客访问: 347120
  • 博文数量: 97
  • 博客积分: 2130
  • 博客等级: 大尉
  • 技术积分: 1800
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-24 11:51
文章分类
文章存档

2013年(57)

2012年(40)

我的朋友

分类: PHP

2013-01-22 10:00:38

 


  使用 DOM 库读取 XML

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

  图 1. 图书 XML XML DOM

 

  ?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 文件并显示内容的代码。参考

阅读(1119) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~