你是不是暗恋我,那就给我发个消息呀,让我知道o(∩∩)o
分类: PHP
2014-09-26 15:19:21
XML 是一种数据存储格式。它没有定义保存什么数据,也没有定义数据的格式。XML 只是定义了标记和这些标记的属性。它的标记完全可以自定义,按照你想要的格式来保存数据。
在这里介绍三种PHP 读取和编写XML的方法。
XML例子文件:
1
2 3 4 5 6 7 8 9 10 11 12 |
> > > |
DOM 库把整个 XML 文档读入内存,并用节点树表示它,如图
DOM库读取XML代码如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$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"; } ?> |
直接看代码如下:
1
2 3 4 5 6 7 |
$xml = ('example.xml'); //循环读取 books标签下的子标签 Foreach($xml->books->children() as $books){ ($books); } ?> |
PHP有两种基本的 XML 解析器类型:
?基于树的解析器:这种解析器把 XML 文档转换为树型结构。它分析整篇文档,并提供了 API 来访问树种的元素,例如文档对象模型 (DOM)。
?基于事件的解析器:将 XML 文档视为一系列的事件。当某个具体的事件发生时,解析器会调用函数来处理。
Expat解析器是基于事件的解析器。
基于事件的解析器集中在 XML 文档的内容,而不是它们的结果。正因如此,基于事件的解析器能够比基于树的解析器更快地访问数据。
XML 文件例子:
1
2 3 4 5 6 7 |
version="1.0"?>
>You are a handsome boy!> > |
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
//初始化 XML parser $parser=(); //分析开始标记的函数 function start($parser,$element_name,$element_attrs) { switch($element_name) { case "NOTE": echo "-- Note -- "; break; case "TO": echo "To: "; break; case "FROM": echo "From: "; break; case "HEADING": echo "Heading: "; break; case "BODY": echo "Message: "; } } //分析结束标记的函数 function stop($parser,$element_name) { echo " "; } //输出找到的数据 function char($parser,$data) { echo $data; } //指定处理程序 ($parser,"start","stop"); //指定要处理的数据 ($parser,"char"); //打开XML文件 $fp=("test.xml","r"); //读取XML文件 while ($data=($fp,4096)) { ($parser,$data,($fp)) or (("XML Error: %s at line %d", (($parser)), xml_get_current_line_number($parser))); } //释放解析器 ($parser); ?> |
以上代码输出:
– Note –
To: Kane
From: Frank
Heading: Reminder
Message: You are a handsome boy!
工作原理解释:
?通过 xml_parser_create() 函数初始化 XML 解析器
?创建配合不同事件处理程序的的函数
?添加 xml_set_element_handler() 函数来定义,当解析器遇到开始和结束标签时执行哪个函数
?添加 xml_set_character_data_handler() 函数来定义,当解析器遇到字符数据时执行哪个函数
?通过 xml_parse() 函数来解析文件 “test.xml”
?万一有错误的话,添加 xml_error_string() 函数把 XML 错误转换为文本说明
?调用 xml_parser_free() 函数来释放分配给 xml_parser_create() 函数的内存
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
$books = (); $books [] = ( 'title' => 'PHP Hacks', 'author' => 'Jack Herrington', 'publisher' => "O'Reilly" ); $books [] = ( 'title' => 'Podcasting Hacks', 'author' => 'Jack Herrington', 'publisher' => "O'Reilly" ); $doc = new DOMDocument(); $doc->formatOutput = true; |