php中对xml读取的相关函数的介绍一
2018-09-07 19:12
  对象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文件代码如下:
这个程序的结果如下: 
引用: -------------------------------------------------------------------------------- 
名字:张三职位:经理 
名字:李四职位:助理 
复制代码 代码如下:
<?xmlversion=1.0?> 
<employees> 
<employee> 
<name>张三</name> 
<positionage=45>经理</position> 
</employee> 
<employees> 
<employee> 
<name>李四</name> 
<positionage=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; 
functionstartElement($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职位:; 
} 
} 
functioncharacterData($parser_instance,$xml_data)//读取数据时的函数 
{ 
global$name,$position; 
if($position) 
echo$xml_data.<br>; 
if($name) 
echo$xml_data.<br>; 
} 
functionendElement($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(”);这个东西。 
上面纯属个人看法,请大家指正。希望对大家有帮助。
上一篇:php获取excel文件数据
下一篇:php at(@)符号的用法简介