用PHP5的SimpleXML解析XML文档-PHP技术-3P代码网
繁体中文
设为首页
加入收藏
当前位置:PHP技术首页 >> PHP基础 >> 用PHP5的SimpleXML解析XML文档

用PHP5的SimpleXML解析XML文档

2005-01-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:messages.xml ========================================================      System Down for Maintenance     Going down for maintenance soon!         Joe SystemGod    systemgod@somese...
关键字:SimpleXML 文档 PHP5 XML

messages.xml

========================================================

     System Down for Maintenance

    Going down for maintenance soon!

    

   Joe SystemGod

   systemgod@someserver.com

    

    March 4, 2004

   10

========================================================

xml 是一种创建元数据的语言,元数据是描述其它数据的数据,PHP中的XML处理是基于LIBXML2的,安装时默认开启。

可以通过phpinfo()函数查看是否开启了XML处理模块,DOM,LIBXML,SAMPLEXML。

首先,通过samplexml_load_file函数把xml文件加载到一个对象中,samplexml_load_file可以用户远程文件.

例如:

$xml = samplexml_load_file("messages.xml"); // 本地文件系统,当前目录

$xml = samplexml_load_file("http://www.xml.org.cn/messages.xml"); // 远程web服务器

用 var_dump($xml) 和 print_r($xml) 分别输出其结构.var_dump给出了变量的类型和长度,而print_r可读性更强

输出对象中的所有元素名称和它的值.

echo $xml->MessageTitle; //输出消息的标题

echo $xml->MessageBody; // 输出消息体

echo $xml->MessageAuthor; //消息的作者

echo $xml->MessageDate;  // 消息产生的日期

echo $xml->MessageNumber;  // 消息代码

===================================================

另外,还有一个函数,可以把XML字符串加载到一个simplexml对象中取

$channel =<<<_XML_

What's For Dinner

http://menu.example.com/

These are your choices of what to eat tonight.

_XML_;

$xml = simplexml_load_string($channel);

===================================================

rss.xml

=============================================

 What's For Dinner

 http://menu.example.com/

 These are your choices of what to eat tonight.

 

  Braised Sea Cucumber

  http://menu.example.com/dishes.php?dish=cuke

  Gentle flavors of the sea that nourish and refresh you.

 

 

  Baked Giblets with Salt

  http://menu.example.com/dishes.php?dish=giblets

  Rich giblet flavor infused with salt and spice.

 

 

  Abalone with Marrow and Duck Feet

  http://menu.example.com/dishes.php?dish=abalone

  There's no mistaking the special pleasure of abalone.

 

=====================================================

1.访问具有相同元素名称的节点

2.通过foreach循环所有相同元素名称的子节点

foreach($xml->channel->item as $key=>$value)

{

print "Title: " . $item->title . "\n";

}

3.输出整个文档

echo $xml->asXML();

4.把节点作为字符串输出

echo $xml->channel->item[0]->asXML();

这将输出文本

Braised Sea Cucumber

http://menu.example.com/dishes.php?dish=cuke

Gentle flavors of the sea that nourish and refresh you.

带文件名参数的asXML将会把原本输出的内容保存为一个文件

$xml->channel->item[0]->asXML("item[0].xml");

完整的代码:

rss.xml

=====

 What's For Dinner

 http://menu.example.com/

 These are your choices of what to eat tonight.

 

  Braised Sea Cucumber

  http://menu.example.com/dishes.php?dish=cuke

  Gentle flavors of the sea that nourish and refresh you.

 

 

  Baked Giblets with Salt

  http://menu.example.com/dishes.php?dish=giblets

  Rich giblet flavor infused with salt and spice.

 

 

  Abalone with Marrow and Duck Feet

  http://menu.example.com/dishes.php?dish=abalone

  There's no mistaking the special pleasure of abalone.

 

rss.php

======

$xml = simplexml_load_file("rss.xml");

echo "".$xml->channel->title."

";

echo "";

echo "Title:".$xml->channel->item[0]->title."";

echo "Title:".$xml->channel->item[1]->title."";

echo "Title:".$xml->channel->item[2]->title."";

echo "";

print "Title: " . $xml->channel->item[0]->title . "\n

";

print "Title: " . $xml->channel->item[1]->title . "\n

";

print "Title: " . $xml->channel->item[2]->title . "\n

";

echo "";

foreach ($xml->channel->item[0] as $element_name => $content) {

  print "The $element_name is $content\n

";

}

echo "";

print_r($xml);

echo $xml->channel->item[0]->asXML();

?>

任何XML文本在输出前最好用 htmlentiteis() 函数编码后再输出,否这可能出现问题

责任编辑:admin
相关文章