XML 文件

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

源文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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>
</xml>

读取方法

DOMDocument

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php  
$doc new DOMDocument();  
$doc->load('person.xml');  
$humans $doc->getElementsByTagName"humans" );  
foreach$humans as $human ) {  
$names $human->getElementsByTagName"name" );  
$name $names->item(0)->nodeValue;  
$sexs $human->getElementsByTagName"sex" );  
$sex $sexs->item(0)->nodeValue;  
$olds $human->getElementsByTagName"old" );  
$old $olds->item(0)->nodeValue;  
echo "$name - $sex - $old\n";  
}  
?> 

simplexml

1
2
3
4
5
6
<?php  
$xml_array=simplexml_load_file('person.xml');  
foreach($xml_array as $tmp) {  
echo $tmp->name."-".$tmp->sex."-".$tmp->old."<br>";  
}  
?> 

正则表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php  
$xml "";  
$f fopen('person.xml''r');  
while$data fread$f4096 ) ) {  
$xml .= $data;  
}  
fclose$f );  
preg_match_all"/\<humans\>(.*?)\<\/humans\>/s"$xml$humans );  
foreach$humans[1as $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[1as $key=>$val) {  
echo $val." - ".$sex[$key][1]." - ".$old[$key][1]."<br>" ;  
}  
?>

xmlreader

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php  
$reader new XMLReader();  
$reader->open('person.xml');  
$i=1;  
while ($reader->read()) {  
if ($reader->nodeType == XMLReader::TEXT) {  
if($i%3) {  
echo $reader->value;  
} else {  
echo $reader->value."<br>" ;  
}  
$i++;  
}  
}  
?>

小结

读取 XML 的方法很多,简单举几个。上面四种方法都是可以把标签中的数据读出来,张映.但是他们的测重点不同,前三种方法的读取 XML 的 function 的设计重点,是为了读取标签中的值,相当于 jquery 中的 text()方法,而 xmlreader 呢他就不太一样,他的重点不在读取标签中的值,而读取标签的属性,把要传送的数据,都放在属性中(不过我上面写的那个方法还是取标签中的值,因为 XML 文件已经给定了,我就不想在搞 XML 文件出来了)。
举个例子解释一下,

1
<data name=’张映’ sex=’男’ old=’28′></data> 

xmlreader 的设计重点是为了读 data 里面的 name sex old 的值,而读取的内容就比较麻烦了。他相当于 jquery 中 attr(”);这个东西。