php中对xml读取的相关函数的介绍一

对象 XML解析函数 描述 
元素 xml_set_element_handler() 元素的开始和结束 
字符数据 xml_set_character_data_handler() 字符数据的开始 
外部实体 xml_set_external_entity_ref_handler() 外部实体出现 
未解析外部实体 xml_set_unparsed_entity_decl_handler() 未解析的外部实体出现 
处理指令 xml_set_processing_instruction_handler() 处理指令的出现 
记法声明 xml_set_notation_decl_handler() 记法声明的出现 
默认 xml_set_default_handler() 其它没有指定处理函数的事件

下面就给大家举一个小小的例子用parser函数来读取xml数据:

xml文件代码如下:

这个程序的结果如下:

引用: --------------------------------------------------------------------------------
名字:张三 职位:经理
名字:李四 职位:助理


代码如下:

<?xml version="1.0"?> 
<employees> 
<employee> 
<name>张三</name> 
<position age="45">经理</position> 
</employee> 
<employees> 
<employee> 
<name>李四</name> 
<position age="45">助理</position> 
</employee> 
</employees>

代码如下:

<?php 
$parser = xml_parser_create(); //创建一个parser编辑器 
xml_set_element_handler($parser, "startElement", "endElement");//设立标签触发时的相应函数 这里分别为startElement和endElenment 
xml_set_character_data_handler($parser, "characterData");//设立数据读取时的相应函数 
$xml_file="1.xml";//指定所要读取的xml文件,可以是url 
$filehandler = fopen($xml_file, "r");//打开文件

while ($data = fread($filehandler, 4096))  

    xml_parse($parser, $data, feof($filehandler)); 
}//每次取出4096个字节进行处理

fclose($filehandler); 
xml_parser_free($parser);//关闭和释放parser解析器

$name=false; 
$position=false; 
function startElement($parser_instance, $element_name, $attrs)        //起始标签事件的函数 
 { 
   global $name,$position;   
   if($element_name=="NAME") 
   { 
   $name=true; 
   $position=false; 
   echo "名字:"; 
  } 
  if($element_name=="POSITION") 
   {$name=false; 
   $position=true; 
   echo "职位:"; 
  } 
}

function characterData($parser_instance, $xml_data)                  //读取数据时的函数  

   global $name,$position; 
   if($position) 
    echo $xml_data."<br>"; 
    if($name) 
     echo $xml_data."<br>"; 
}

function endElement($parser_instance, $element_name)                 //结束标签事件的函数 

 global $name,$position;  
$name=false; 
$position=false;   
}

?>

PHP读取xml方法介绍

一,什么是xml,xml有什么用途
  XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。
  XML的用途很多,可以用来存储数据,可以用来做数据交换,为很多种应用软件提示数据等等。
二,php读取xml的方法
  xml源文件


代码如下:

<?xml version="1.0 encoding="UTF-8"?>
<humans>
<zhangying>
<name>张映</name>
<sex>男</sex>
<old>28</old>
</zhangying>
<tank>
<name>tank</name>
<sex>男</sex>
<old>28</old>
</tank>
</humans>

  1)DOMDocument读取xml


代码如下:

<?php
$doc = new DOMDocument();
$doc->load('person.xml'); //读取xml文件
$humans = $doc->getElementsByTagName( "humans" ); //取得humans标签的对象数组
foreach( $humans as $human )
{
$names = $human->getElementsByTagName( "name" ); //取得name的标签的对象数组
$name = $names->item(0)->nodeValue; //取得node中的值,如<name> </name>
$sexs = $human->getElementsByTagName( "sex" );
$sex = $sexs->item(0)->nodeValue;
$olds = $human->getElementsByTagName( "old" );
$old = $olds->item(0)->nodeValue;
echo "$name - $sex - $old\n";
}
?>

  2)simplexml读取xml


代码如下:

<?php
$xml_array=simplexml_load_file('person.xml'); //将XML中的数据,读取到数组对象中
foreach($xml_array as $tmp){
echo $tmp->name."-".$tmp->sex."-".$tmp->old."<br>";
}
?>

  3)用php正则表达式来记取数据


代码如下:

<?php
$xml = "";
$f = fopen('person.xml', 'r');
while( $data = fread( $f, 4096 ) ) {
$xml .= $data;
}
fclose( $f );
// 上面读取数据
preg_match_all( "/\<humans\>(.*?)\<\/humans\>/s", $xml, $humans ); //匹配最外层标签里面的内容
foreach( $humans[1] as $k=>$human )
{
preg_match_all( "/\<name\>(.*?)\<\/name\>/", $human, $name ); //匹配出名字
preg_match_all( "/\<sex\>(.*?)\<\/sex\>/", $human, $sex ); //匹配出性别
preg_match_all( "/\<old\>(.*?)\<\/old\>/", $human, $old ); //匹配出年龄
}
foreach($name[1] as $key=>$val){
echo $val." - ".$sex[$key][1]." - ".$old[$key][1]."<br>" ;
}
?>

  4)xmlreader来读取xml数据


代码如下:

<?php
$reader = new XMLReader();
$reader->open('person.xml'); //读取xml数据
$i=1;
while ($reader->read()) { //是否读取
if ($reader->nodeType == XMLReader::TEXT) { //判断node类型
if($i%3){
echo $reader->value; //取得node的值
}else{
echo $reader->value."<br>" ;
}
$i++;
}
}
?>

  三,小结
  读取xml的方法很多,简单举几个。上面四种方法都是可以把标签中的数据读出来,张映.但是他们的测重点不同,前三种方法的读取xml的function的设计重点,是为了读取标签中的值,相当于jquery中的text()方法,而xmlreader呢他就不太一样,他的重点不在读取标签中的值,而读取标签的属性,把要传送的数据,都放在属性中(不过我上面写的那个方法还是取标签中的值,因为xml文件已经给定了,我就不想在搞xml文件出来了)。
  举个例子解释一下,
  <data name='张映' sex='男' old='28′></data>
  xmlreader的设计重点是为了读data里面的name sex old的值,而读取的内容就比较麻烦了。他相当于jquery中attr(”);这个东西。
  上面纯属个人看法,请大家指正。希望对大家有帮助。

(0)

相关推荐

  • PHP读取XML值的代码(推荐)

    用Php读取XML最简单的情况: XML文件(cy.xml)如下: 复制代码 代码如下: <?xml version="1.0″ encoding="gb2312″?> <xml> <list>1</list> <list>2</list> <list>3</list> </xml> Php文件(cy.php)如下: 复制代码 代码如下: <?php $xml = new

  • PHP XML操作的各种方法解析(比较详细)

    XML是一种流行的半结构化文件格式,以一种类似数据库的格式存储数据.在实际应用中,一些简单的.安全性较低的数据往往使用 XML文件的格式进行存储.这样做的好处一方面可以通过减少与数据库的交互性操作提高读取效率,另一方面可以有效利用 XML的优越性降低程序的编写难度. PHP提供了一整套的读取 XML文件的方法,很容易的就可以编写基于 XML的脚本程序.本章将要介绍 PHP与 XML的操作方法,并对几个常用的 XML类库做一些简要介绍. 1 XML简介 XML是"可扩展性标识语言(eXtensib

  • php xml 入门学习资料

    起因: 今天做项目时遇到一个问题:需要动态更新主页上的图片,以示本站不是做完了就算了,是有人一直在维护.好了,需求有了,如何实现?! 我的想法如下: 图片存放位置:放在一个文件夹中:图片的类型:不能固定了,只要是图片就可以上传显示:图片名字:按原始名字有点不正规,应该重新命名一下. 显示的位置:这就需要对图片指定相应的id,这个id是固定的,要与图片一一对应.于是就有一个记录一一对应的关系文件,可以选择csv文件,选择数据库记录,最后决定选择xml,这个东西在学校一直没学懂,我一直回避使用这东西

  • PHP用SAX解析XML的实现代码与问题分析

    复制代码 代码如下: <?php $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; $

  • php XMLWriter类的简单示例代码(RSS输出)

    复制代码 代码如下: include 'mysql.php'; $mysql= mysql::getObject(); $mysql->query("SELECT * FROM post"); $xml = new XMLWriter(); $xml->openUri('hello.xml'); // or 'php://output' $xml->setIndentString(' '); $xml->setIndent(true); // start $xm

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

    用 PHP 读取和编写可扩展标记语言(XML)看起来可能有点恐怖.实际上,XML 和它的所有相关技术可能是恐怖的,但是用 PHP 读取和编写 XML 不一定是项恐怖的任务.首先,需要学习一点关于 XML 的知识 -- 它是什么,用它做什么.然后,需要学习如何用 PHP 读取和编写 XML,而有许多种方式可以做这件事. 本文提供了 XML 的简短入门,然后解释如何用 PHP 读取和编写 XML. 什么是 XML? XML 是一种数据存储格式.它没有定义保存什么数据,也没有定义数据的格式.XML 只

  • PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节

    一. XML简介 XML(可扩展的标注语言)是一种W3C标准,主要用于Web应用程序和服务器之间实现容易的交互.数据的存储与使用. 使用XML标准编码的数据具有能容易被人和计算机解释的意义和结构.XML数据是平台和应用程序独立的.不用多说,这本身就使XML成为适合于互联网的一个理想的数据交换格式(事实上,它正是因这一用途而被开发的).最近,宽带连接的增长及消费者对于越过任何媒体进行数据共享的应用软件的需求意味着,XML Web服务和应用软件正变得越来越丰富. XML的发明正是为了解决描述网上丰富

  • php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)

    共分四个文件,分别是创建.增加.删除.修改四个功能,变量都是写死的,改一改用$_POST方式接收就可以用了 //index.php 创建功能 复制代码 代码如下: <?php $xmlpatch = 'index.xml'; $_id = '1'; $_title = 'title1'; $_content = 'content1'; $_author = 'author1'; $_sendtime = 'time1'; $_htmlpatch = '1.html'; jb51.net$doc

  • php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法

    解决方法: 使用服务器作为代理. 在PHP中, 使用我最喜欢的最强大的CURL,嘿嘿 下面是在万网查询域名的实例代码 复制代码 代码如下: <?php $dn = $_GET['dn']; // 域名, 不包括www $ex = $_GET['ex']; // 顶级域名, 如 .com, .cn, 包括最前面的. // 查询域名是否已经注册 $url = 'http://pandavip.www.net.cn/check/check_ac1.cgi'; $ch = curl_init($url)

  • PHP操作XML作为数据库的类

    xml.class.php文件代码 复制代码 代码如下: <?php * example 读取数据: * * $xml = new xml("dbase.xml",'table'); * * $data=$xml->xml_fetch_array(); * * echo "<pre style="font-size:12px;">"; * * print_r($data); * class xml { var $dbase

  • php中使用DOM类读取XML文件的实现代码

    主要功能:php中使用DOM类读取XML文件 设计知识点: 1.XML节点循环读取 2.用iconv()函数实现编码转换,防止中文乱码 holiday.xml文件如下 复制代码 代码如下: <?xml version="1.0" encoding="UTF-8"?> <daysOff-overTime> <year> <yearName>2012</yearName> <holiday> <

随机推荐

其他