用PHP5的SimpleXML解析XML文档

原创 2005年05月03日 05:03:00
messages.xml
========================================================
<?xml version="1.0" ?>
<!--Sample XML document -->
<SystemMessage>
        <MessageTitle>System Down for Maintenance</MessageTitle>
        <MessageBody>Going down for maintenance soon!</MessageBody>
        <MessageAuthor>
     <MessageAuthorName>Joe SystemGod</MessageAuthorName>
     <MessageAuthorEmail>systemgod@someserver.com</MessageAuthorEmail>
        </MessageAuthor>
        <MessageDate>March 4, 2004</MessageDate>
     <MessageNumber>10</MessageNumber>

</SystemMessage>

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

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_
<channel>
 <title>What's For Dinner</title>
 <link>http://menu.example.com/</link>
 <description>These are your choices of what to eat tonight. </description>
</channel>
_XML_;

$xml = simplexml_load_string($channel);
===================================================


rss.xml

=============================================
<?xml version="1.0" encoding="utf-8"?>
<rss version="0.91">
 <channel>
  <title>What's For Dinner</title>
  <link>http://menu.example.com/</link>
  <description>These are your choices of what to eat tonight.</description>
  <item>
   <title>Braised Sea Cucumber</title>
   <link>http://menu.example.com/dishes.php?dish=cuke</link>
   <description>Gentle flavors of the sea that nourish and refresh you. </description>
  </item>
  <item>
   <title>Baked Giblets with Salt</title>
   <link>http://menu.example.com/dishes.php?dish=giblets</link>
   <description>Rich giblet flavor infused with salt and spice. </description>
  </item>
  <item>
   <title>Abalone with Marrow and Duck Feet</title>
   <link>http://menu.example.com/dishes.php?dish=abalone</link>
   <description>There's no mistaking the special pleasure of abalone. </description>
  </item>
 </channel>
</rss>

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

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();

这将输出文本

<item>
 <title>Braised Sea Cucumber</title>
 <link>http://menu.example.com/dishes.php?dish=cuke</link>
 <description>Gentle flavors of the sea that nourish and refresh you. </description>
</item>


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

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


完整的代码:

rss.xml
=====
<?xml version="1.0" encoding="utf-8"?>
<rss version="0.91">
 <channel>
  <title>What's For Dinner</title>
  <link>http://menu.example.com/</link>
  <description>These are your choices of what to eat tonight.</description>
  <item>
   <title>Braised Sea Cucumber</title>
   <link>http://menu.example.com/dishes.php?dish=cuke</link>
   <description>Gentle flavors of the sea that nourish and refresh you. </description>
  </item>
  <item>
   <title>Baked Giblets with Salt</title>
   <link>http://menu.example.com/dishes.php?dish=giblets</link>
   <description>Rich giblet flavor infused with salt and spice. </description>
  </item>
  <item>
   <title>Abalone with Marrow and Duck Feet</title>
   <link>http://menu.example.com/dishes.php?dish=abalone</link>
   <description>There's no mistaking the special pleasure of abalone. </description>
  </item>
 </channel>
</rss>

 

rss.php
======
<?php
$xml = simplexml_load_file("rss.xml");

echo "<h3>".$xml->channel->title."</h3><br>";
echo "<ul>";
echo "<li>Title:".$xml->channel->item[0]->title."</li>";
echo "<li>Title:".$xml->channel->item[1]->title."</li>";
echo "<li>Title:".$xml->channel->item[2]->title."</li>";
echo "</ul>";
print "Title: " . $xml->channel->item[0]->title . "/n<br>";
print "Title: " . $xml->channel->item[1]->title . "/n<br>";
print "Title: " . $xml->channel->item[2]->title . "/n<br>";
echo "<hr>";

foreach ($xml->channel->item[0] as $element_name => $content) {
    print "The $element_name is $content/n<br>";
}

echo "<hr>";
print_r($xml);
echo $xml->channel->item[0]->asXML();
?>

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

DOM、SAX、SimpleXML方式解析XML文档总结

本周学习知识点: XML扩展性标记语言:      一.DOM方式操作   二.SAX方式操作   三.simpleXML的方式   四.DOM 与 simpleXML相互转换  ...

PHP解析XML文档

  • 2011年09月30日 14:56
  • 374KB
  • 下载

android学习笔记(5)-SharedPreferences方式保存用户喜好参数(附pull解析Xml文档详解)

SharedPreferences保存用户喜好参数 很多时候我们需要对处理的数据进行存储,以供再次访问,这里介绍一种数据存储方式 SharedPreferences 他是一个较轻量级的存储类,...

PHP5的PHP.INI配置介绍, 解析文档

configure –help说明 配置帮助表: –help 显示帮助信息 display this help and exit –ver...

php的SimpleXML方法读写XML接口文件实例解析

本文为大家讲解的是php的SimpleXML方法读写XML接口文件示例,感兴趣的同学参考下。 在php5中读写xml文档是非常方便的,可以直接使用php的SimpleXML方法来快速解析与生成x...

PHP生成和解析xml(SimpleXML版)

php中一套比较简洁的操作xml的方法,相比java操作xml要简单好几倍。有需要的话可以随便看看。...

PHP的三种XML解析器之SimpleXML解析器(三)

XML文件内容 腾讯 百度 bat BAT是中国互联网公司百度公司(Baidu)、阿里巴巴集团(Alibaba)、腾讯公司(Tencent)三大巨头首字母缩写。 PHP文件内容 ...

php的SimpleXML方法读写XML接口文件实例解析

本文为大家讲解的是php的SimpleXML方法读写XML接口文件示例,感兴趣的同学参考下。 在php5中读写xml文档是非常方便的,可以直接使用php的SimpleXML方法来快速解析与生成x...

在PHP5中使用DOM控制XML

PHP5中增强了XML的支持,使用DOM扩展了XML操作的能耐。这些函数作为 PHP5 核心的一部分,无需被安装即可使用。 下面的例子简单的演示了DOM对XML的操作,详细解释请看代码中的注释 ...

xPath对xml文档的处理入门5

我测试的环境是:WindowsXP、eclipse3.2、jdk1.6、dom4j1.6.1.jar、z-dom4j-1.4.jar 本节介绍:xpath中的轴: xml文件为:   ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用PHP5的SimpleXML解析XML文档
举报原因:
原因补充:

(最多只允许输入30个字)