选择显示字体大小

用php读取和编写xml dom(1)

    
    有许多技术可用于用 php 读取和编写 xml。本文提供了三种方法读取 xml:使用 dom 库、使用 sax 解析器和使用正则表达式。还介绍了使用 dom 和 php 文本模板编写 xml
  
    用 php 读取和编写可扩展标记语言(xml)看起来可能有点恐怖。实际上,xml 和它的所有相关技术可能是恐怖的,但是用 php 读取和编写 xml 不一定是项恐怖的任务。首先,需要学习一点关于 xml 的知识 —— 它是什么,用它做什么。然后,需要学习如何用 php 读取和编写 xml,而有许多种方式可以做这件事。
  
    本文提供了 xml 的简短入门,然后解释如何用 php 读取和编写 xml
  
    什么是 xml
  
    xml 是一种数据存储格式。它没有定义保存什么数据,也没有定义数据的格式。xml 只是定义了标记和这些标记的属性。格式良好的 xml 标记看起来像这样:
  
  <name>jack herrington</name>
  
    这个 <name> 标记包含一些文本:jack herrington。
  
    不包含文本的 xml 标记看起来像这样:
  
  <powerup />
  
    用 xml 对某件事进行编写的方式不止一种。例如,这个标记形成的输出与前一个标记相同:
  
  <powerup></powerup>
  
    也可以向 xml 标记添加属性。例如,这个 <name> 标记包含 first 和 last 属性:
  
  <name first="jack" last="herrington" />
  
    也可以用 xml 对特殊字符进行编码。例如,& 符号可以像这样编码:
  
    &
  
    包含标记和属性的 xml 文件如果像示例一样格式化,就是格式良好的,这意味着标记是对称的,字符的编码正确。清单 1 是一份格式良好的 xml 的示例。
  
    清单 1. xml 图书列表示例
  
  
   <books>
   <book>
   <author>jack herrington</author>
   <title>php hacks</title>
   <publisher>o'reilly</publisher>
   </book>
   <book>
   <author>jack herrington</author>
   <title>podcasting hacks</title>
   <publisher>o'reilly</publisher>
   </book>
   </books>
  
  
  
    清单 1 中的 xml 包含一个图书列表。父标记 <books> 包含一组 <book> 标记,每个 <book> 标记又包含 <author>、<title> 和 <publisher> 标记。
  
    当 xml 文档的标记结构和内容得到外部模式文件的验证后,xml 文档就是正确的。模式文件可以用不同的格式指定。对于本文来说,所需要的只是格式良好的 xml
  
    如果觉得 xml 看起来很像超文本标记语言(html),那么就对了。xmlhtml 都是基于标记的语言,它们有许多相似之处。但是,要着重指出的是:虽然 xml 文档可能是格式良好的 html,但不是所有的 html 文档都是格式良好的 xml。换行标记(br)是 xmlhtml 之间区别的一个好例子。这个换行标记是格式良好的 html,但不是格式良好的 xml
  
  <p>this is a paragraph<br>
  with a line break</p>
  
    这个换行标记是格式良好的 xmlhtml
  
  <p>this is a paragraph<br />
  with a line break</p>
  
    如果要把 html 编写成同样是格式良好的 xml,请遵循 w3c 委员会的可扩展超文本标记语言(xhtml)标准(参见 参考资料)。所有现代的浏览器都能呈现 xhtml。而且,还可以用 xml 工具读取 xhtml 并找出文档中的数据,这比解析 html 容易得多。
  
    使用 dom 库读取 xml
  
    读取格式良好的 xml 文件最容易的方式是使用编译成某些 php 安装的文档对象模型 (dom)库。dom 库把整个 xml 文档读入内存,并用节点树表示它,如图 1 所示。
  
  树顶部的 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 库该怎么办?
  
  
  
    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons