`
天梯梦
  • 浏览: 13641755 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

用 PHP 读取和编写 XML DOM

阅读更多

简单代码:

 

<?php  
$str = file_get_contents('test.xml');  
//如果不是utf8的编码  
//$xml = simplexml_load_string(iconv('gb2312', 'utf-8', $str));  
//是utf-8的  
$xml = simplexml_load_string($str);  
foreach($xml->book as $sfile)  
{  
    echo $sfile->author . "<br/>";  
    echo $sfile->title . "<br/>";  
	echo $sfile->publisher . "<br/>";  
}  
 

XML:

 

<?xml version="1.0" encoding="utf8"?>
  <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>
 

读取:

 

// 用 DOM 读取 XML
	$doc = new DOMDocument();
	$doc->load('test.xml');
	  
	$books = $doc->getElementsByTagName("book");

	foreach( $books as $book ){
		$authors = $book->getElementsByTagName("author");
		$author = $authors->item(0)->nodeValue;  // nodeValue属性可根据节点的类型来设置或返回某个节点的值。
		  
		$publishers = $book->getElementsByTagName("publisher");
		$publisher = $publishers->item(0)->nodeValue;
		  
		$titles = $book->getElementsByTagName( "title" );
		$title = $titles->item(0)->nodeValue;
		  
		echo "Title: $title <br> Author: $author <br> Publisher: $publisher<br><hr><br>";
	}

	/*
	脚本首先创建一个 new DOMdocument 对象,用 load 方法把图书 XML 装入这个对象。之后,脚本用 getElementsByName 方法得到指定名称下的所有元素的列表。
	在 book 节点的循环中,脚本用 getElementsByName 方法获得 author、publisher 和 title 标记的 nodeValue。nodeValue 是节点中的文本。脚本然后显示这些值。
	*/

 

// 用 SAX 解析器读取 XML 

	$g_books = array();
	$g_elem = null;
	  
	function startElement( $parser, $name, $attrs ){
		global $g_books, $g_elem;
		if ( $name == 'BOOK' ) $g_books []= array();
		$g_elem = $name;
	}
	  
	function endElement( $parser, $name ){
		global $g_elem;
		$g_elem = null;
	}
	  
	function textData( $parser, $text ){
		global $g_books, $g_elem;
		if ( $g_elem == 'AUTHOR' || $g_elem == 'PUBLISHER' || $g_elem == 'TITLE' ){
			$g_books[ count( $g_books ) - 1 ][ $g_elem ] = $text;
		}
	}
	  
	$parser = xml_parser_create();

	xml_set_element_handler( $parser, "startElement", "endElement" );
	xml_set_character_data_handler( $parser, "textData" );
	 
	$f = fopen( 'test.xml', 'r' );
	  
	while( $data = fread( $f, 4096 ) ){
		xml_parse( $parser, $data );
	}
	  
	xml_parser_free( $parser );
	  
	foreach( $g_books as $book ){
		echo $book['TITLE']." - ".$book['AUTHOR']." - ";
		echo $book['PUBLISHER']."\n";
	}

	/*
	
	脚本首先设置 g_books 数组,它在内存中容纳所有图书和图书信息,g_elem 变量保存脚本目前正在处理的标记的名称。然后脚本定义回调函数。在这个示例中,回调函数是 startElement、endElement  和 textData。在打开和关闭标记的时候,分别调用 startElement 和 endElement  函数。在开始和结束标记之间的文本上面,调用 textData。
	
	在这个示例中,startElement 标记查找 book 标记,在 book  数组中开始一个新元素。然后,textData 函数查看当前元素,看它是不是 publisher、title  或 author 标记。如果是,函数就把当前文本放入当前图书。

	为了让解析继续,脚本用 xml_parser_create 函数创建解析器。然后,设置回调句柄。之后,脚本读取文件并把文件的大块内容发送到解析器。在文件读取之后,xml_parser_free 函数删除解析器。脚本的末尾输出 g_books 数组的内容。

	*/
 
// 用正则表达式解析 XML

  $xml = "";
  $f = fopen( 'test.xml', 'r' );
  while( $data = fread( $f, 4096 ) ) { $xml .= $data; }
  fclose( $f );
  
  preg_match_all( "/\<book\>(.*?)\<\/book\>/s", $xml, $bookblocks );
  
  foreach( $bookblocks[1] as $block ){
	  preg_match_all( "/\<author\>(.*?)\<\/author\>/", $block, $author );
	  preg_match_all( "/\<title\>(.*?)\<\/title\>/", $block, $title );
	  preg_match_all( "/\<publisher\>(.*?)\<\/publisher\>/", $block, $publisher );
	  echo( $title[1][0]." - ".$author[1][0]." - ". $publisher[1][0]."\n" );
  }

  /*
  我从不建议使用正则表达式读取 XML,但是有时它是兼容性最好的方式,因为正则表达式函数总是可用的。不要用正则表达式读取直接来自用户的 XML,因为无法控制这类 XML 的格式或结构。应当一直用 DOM 库或 SAX 解析器读取来自用户的 XML。
  */
 

编写:

 

// 用 DOM 编写 XML


  $books = array();
  $books [] = array(
	  'title' => 'PHP Hacks',
	  'author' => 'Jack Herrington',
	  'publisher' => "O'Reilly"
  );
  $books [] = array(
	  'title' => 'Podcasting Hacks',
	  'author' => 'Jack Herrington',
	  'publisher' => "O'Reilly"
  );
  
  $doc = new DOMDocument();
  $doc->formatOutput = true;
  
  $r = $doc->createElement( "books" );
  $doc->appendChild( $r );
  
  foreach( $books as $book ){
	  $b = $doc->createElement( "book" );
	  
	  $author = $doc->createElement( "author" );
	  $author->appendChild(  $doc->createTextNode( $book['author'] ) );
  
	  $b->appendChild( $author );
	  
	  $title = $doc->createElement( "title" );
	  $title->appendChild( $doc->createTextNode( $book['title'] ) );
  
	  $b->appendChild( $title );
	  
	  $publisher = $doc->createElement( "publisher" );
	  $publisher->appendChild( $doc->createTextNode( $book['publisher'] ) );
  
	  $b->appendChild( $publisher );
	  $r->appendChild( $b );
  }
  
  //echo $doc->saveXML();

	/*
	在脚本的顶部,用一些示例图书装入了 books 数组。这个数据可以来自用户也可以来自数据库。
	示例图书装入之后,脚本创建一个 new DOMDocument,并把根节点 books 添加到它。然后脚本为每本书的 author、title 和 publisher 创建节点,并为每个节点添加文本节点。每个 book 节点的最后一步是重新把它添加到根节点 books。
	使用 DOM 的真正价值在于它创建的 XML 总是格式正确的。但是如果不能用 DOM 创建 XML 时该怎么办?
	*/
 
  <?php

// PHP 编写xml

	  $books = array();
	  $books [] = array(
		  'title' => 'PHP Hacks',
		  'author' => 'Jack Herrington',
		  'publisher' => "O'Reilly"
	  );
	  $books [] = array(
		  'title' => 'Podcasting Hacks',
		  'author' => 'Jack Herrington',
		  'publisher' => "O'Reilly"
	  );
  ?>

  <books>
  <?php  
	  foreach( $books as $book )
	  {
  ?>
	  <book>
	  <title><?php echo( $book['title'] ); ?></title>
	  <author><?php echo( $book['author'] ); ?>
	  </author>
	  <publisher><?php echo( $book['publisher'] ); ?>
	  </publisher>
	  </book>
  <?php
	  }
  ?>
  </books>
 

实例中用到的 test.xml 如下:

 

<?xml version="1.0" encoding="utf8"?>
  <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>

 

  • xml.rar (530 Bytes)
  • 下载次数: 9
分享到:
评论

相关推荐

    用PHP读取和编写XML DOM

    XML 周围总有许多夸大之处和混淆之处。但是,并不像您想像的那么难 —— 特别是在 PHP 这样优秀的...在理解并正确地实现了 XML 之后,就会发现有许多强大的工具可以使用。XPath 和 XSLT 就是这样两个值得研究的工具。

    PHP读取和编写XMLDOM

    本文提供了三种方法读取 XML:使用 DOM 库、使用 SAX 解析器和使用正则表达式。

    用PHP读取和编写XML DOM的实现代码

    用 PHP 读取和编写可扩展标记语言(XML)看起来可能有点恐怖。实际上,XML 和它的所有相关技术可能是恐怖的,但是用 PHP 读取和编写 XML 不一定是项恐怖的任务。首先,需要学习一点关于 XML 的知识 —— 它是什么,...

    用PHP实现读取和编写XML DOM代码

    用PHP读取和编写XML DOM代码,需要的朋友可以参考下。

    PHP 读取和编写 XML

    DOM读取 XML 复制代码 代码如下: &lt;?php  $doc = new DOMDocument();  $doc-&gt;load( ‘books.xml’ );    $books = $doc-&gt;getElementsByTagName( “book” );  foreach( $books as $book )  {  $a

    用PHP编写和读取XML的几种方式

    使用DOM生成和读取XML文件 实例一: 复制代码 代码如下: &lt;?php //Creates XML string and XML document using the DOM $dom = new DomDocument(‘1.0’); //add root – &lt;books&gt; $books = $dom-&gt;appendChild($dom...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    可是一大堆的概念和术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它?我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。首先有两点是需要肯定的:  第一:XML肯定是未来的...

    XML and PHP

    帮助那些不熟悉使用PHP 处理XML 的新手使用PHP 环境中的DOM 和SimpleXML 读取、解析、操作并编写简单短小的XML 文件。

    PHP和MySQL Web开发第4版pdf以及源码

    第18章 使用PHP和MySQL实现安全事务 18.1 提供安全的事务处理 18.1.1 用户机器 18.1.2 Internet 18.1.3 我们的系统 18.2 使用加密套接字层(SSL) 18.3 屏蔽用户的输入 18.4 提供安全存储 18.5 存储信用卡...

    PHP和MySQL WEB开发(第4版)

    第18章 使用PHP和MySQL实现安全事务 18.1 提供安全的事务处理 18.1.1 用户机器 18.1.2 Internet 18.1.3 我们的系统 18.2 使用加密套接字层(SSL) 18.3 屏蔽用户的输入 18.4 提供安全存储 18.5 存储信用卡号码 18.6 ...

    PHP4.0 高级篇

    7.2 PHP和XML 180 7.2.1 什么是XML 180 7.2.2 DocBook 183 7.2.3 WML(Wireless Markup Language) 184 7.2.4 RDF—Resource Description Framework 184 7.2.5 XML文档 184 7.2.6 PHP和Expat 190 7.2.7 DOM—Document ...

    PHPWeb开发技术指南——pdf格式

    7.2 PHP和XML 180 7.2.1 什么是XML 180 7.2.2 DocBook 183 7.2.3 WML(Wireless Markup Language) 184 7.2.4 RDF—Resource Description Framework 184 7.2.5 XML文档 184 7.2.6 PHP和Expat 190 7.2.7 DOM—Document ...

    PHP和MySQL Web开发第4版

    第18章 使用PHP和MySQL实现安全事务 18.1 提供安全的事务处理 18.1.1 用户机器 18.1.2 Internet 18.1.3 我们的系统 18.2 使用加密套接字层(SSL) 18.3 屏蔽用户的输入 18.4 提供安全存储 18.5 存储信用卡...

    【卷一/共两卷】AJAX实战pdf高清版90M

    2.5.2 XMLDocument和XMLHttpRequest对象 2 5.3 向服务器发送请求 2.5.4 使用回调函数监视请求 2.5.5 完整的生命周期 2.6 Ajax有何不同 2.7 小结 2.8 资源 第3章 使AjaX秩序井然 3.1 从混沌到秩序 3.1.1 模式:创造...

    Ajax基础教程(扫描版)

    本书重点介绍ajax及相关的工具和技术,主要内容包括xmlhttprequest对象及其属性和方法、发送请求和处理响应、构建完备的ajax开发工具、使用jsunit测试javascript、分析javascript调试工具和技术,以及ajax开发模式和...

    WEB安全测试

    2.6 在Linux, Unix或OS X上安装Perl和使用CPAN 34 2.7 安装CAL9000 35 2.8 安装ViewState Decoder 36 2.9 安装cURL 36 2.10 安装Pornzilla 37 2.11 安装Cygwin 38 2.12 安装Nikto 2 39 2.13 安装Burp Suite 40 2.14...

    [完整][中文][WEB安全测试].(美)霍普.扫描版.pdf

     本书中的秘诀所覆盖的基础知识包括了从观察客户端和服务器之间的消息到使用脚本完成登录并执行Web应用功能的多阶段测试。在本书的最后,你将能够建立精确定位到Ajax函数的测试,以及适用于常见怀疑对象(跨站式脚本...

Global site tag (gtag.js) - Google Analytics