分享
 
 
 

用PHP5的SimpleXML解析XML文档

王朝php·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有