Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1997710
  • 博文数量: 433
  • 博客积分: 918
  • 博客等级: 准尉
  • 技术积分: 3218
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 18:21
个人简介

你是不是暗恋我,那就给我发个消息呀,让我知道o(∩∩)o

文章分类

全部博文(433)

分类: PHP

2014-09-26 15:19:21



XML 是一种数据存储格式。它没有定义保存什么数据,也没有定义数据的格式。XML 只是定义了标记和这些标记的属性。它的标记完全可以自定义,按照你想要的格式来保存数据。
在这里介绍三种PHP 读取和编写XML的方法。
XML例子文件:

1
2
3
4
5
6
7
8
9
10
11
12
  >
  >
  >Jack Herrington>
  >PHP Hacks>
  >O'Reilly>
  >
  >
  >Jack Herrington>
  >Podcasting Hacks>
  >O'Reilly>
  >
  >


PHP读取XML


一、使用 DOM 库读取 XML

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";
  }
  ?>


二、使用PHP的simplexml_load_file()函数

  直接看代码如下:

1
2
3
4
5
6
7

$xml = ('example.xml');
//循环读取 books标签下的子标签
Foreach($xml->books->children() as $books){
    ($books);
}
?>


三、使用PHP XML Expat 解析器

  PHP有两种基本的 XML 解析器类型:
   ?基于树的解析器:这种解析器把 XML 文档转换为树型结构。它分析整篇文档,并提供了 API 来访问树种的元素,例如文档对象模型 (DOM)。
   ?基于事件的解析器:将 XML 文档视为一系列的事件。当某个具体的事件发生时,解析器会调用函数来处理。


   Expat解析器是基于事件的解析器。
   基于事件的解析器集中在 XML 文档的内容,而不是它们的结果。正因如此,基于事件的解析器能够比基于树的解析器更快地访问数据。


  XML 文件例子:

1
2
3
4
5
6
7
 version="1.0"?>
>

>Kane>
>Frank>
>Reminder>
>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() 函数的内存


下面是一个PHP编写XML文件的例子

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;
  
阅读(1647) | 评论(0) | 转发(0) |
0

上一篇:php使用正则表达式 preg

下一篇:python 素数

给主人留下些什么吧!~~