用PHP编写和读取XML的几种方式


Posted in PHP onJanuary 12, 2013

一.使用DOM生成和读取XML文件
实例一:

<?php 
//Creates XML string and XML document using the DOM 
$dom = new DomDocument('1.0'); 
//add root - <books> 
$books = $dom->appendChild($dom->createElement_x_x ('books')); 
//add <book> element to <books> 
$book = $books->appendChild($dom->createElement_x_x ('book')); 
//add <title> element to <book> 
$title = $book->appendChild($dom->createElement_x_x ('title')); 
//add <title> text node element to <title> 
$title->appendChild($dom->createTextNode('Great American Novel')); 
//generate xml 
$dom->formatOutput = true; // set the formatOutput attribute of domDocument to true 
//save XML as string or file 
$test1 = $dom->saveXML(); // put string in test1 
$dom -> save('test1.xml'); // save as file 
?>

实例二:
$aa = "111"; 
$xmlstr = <<<XML 
<?xml version='1.0'?> 
<document> 
<title>{$aa}</title> 
<from>Joe</from> 
<to>Jane</to> 
<body> 
I know that's the answer -- but what's the question? 
</body> 
</document> 
XML; 
$dom = new domDocument; 
$dom->loadXML($xmlstr); 
$test1 = $dom->saveXML(); 
$dom->save('test1.xml');

实例三:
test1.xml:

<?xml version="1.0"?> 
<books> 
<book> 
<author>Jack Herrington</author> 
<title>PHP Hacks</title> 
<publisher>O'Reilly</publisher> 
</book> 
<book> 
<author>Jack Herrington</author> 
<title>Podcasting Hacks</title> 
<publisher>O'Reilly</publisher> 
</book> 
</books>

example.php:

$doc = new DOMDocument(); 
$doc->load('test1.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"; 
}

二.使用simple生成和读取xml文件
实例一:

<? 
$xmlstr = <<<XML 
<?xml version='1.0' standalone='yes'?> 
<books> 
<book> 
<title>Great American Novel</title> 
<characters> 
<character> 
<name>Cliff</name> 
<desc>really great guy</desc> 
</character> 
<character> 
<name>Lovely Woman</name> 
<desc>matchless beauty</desc> 
</character> 
<character> 
<name>Loyal Dog</name> 
<desc>sleepy</desc> 
</character> 
</characters> 
<plot> 
Cliff meets Lovely Woman. Loyal Dog sleeps, but wakes up to bark 
at mailman. 
</plot> 
<success type='bestseller'>4</success> 
<success type='bookclubs'>9</success> 
</book> 
</books> 
XML; //提取节点内容 
$xml = new SimpleXMLElement($xmlstr); 
foreach ($xml->book[0]->success as $success) { 
switch((string) $success['type']) { // Get attributes as element indices 
case 'bestseller': 
echo $success. ' months on bestseller list<br>'; 
break; 
case 'bookclubs': 
echo $success. ' bookclub listings'; 
break; 
} 
} 
//修改文本节点内容 
$xml = new SimpleXMLElement($xmlstr); 
$xml->book[0]->characters->character[0]->name = 'Big Cliff'; 
echo $xml->asXML(); 
//添加子元素的文本节点 
$xml = new SimpleXMLElement($xmlstr); 
$character = $xml->book[0]->characters->addChild('character'); 
$character->addChild('name', 'Yellow Cat'); 
$character->addChild('desc', 'aloof'); 
$success = $xml->book[0]->addChild('success', '2'); 
$success->addAttribute('type', 'reprints'); 
echo $xml->asXML(); 
?>

实例二:

if (file_exists('test1.xml')) { //读取xml文件 
$xml = simplexml_load_file('test1.xml'); 
var_dump(xml); 
} else { 
exit('Failed to open test1.xml.'); 
}

三.DOM和simple互操作
DOM导入simpleXML:

<?php 
$sxe = simplexml_load_string('<books><book><title>Great American 
Novel</title></book></books>'); 
if ($sxe === false) { 
echo 'Error while parsing the document'; 
exit; 
} 
$dom_sxe = dom_import_simplexml($sxe); 
if (!$dom_sxe) { 
echo 'Error while converting XML'; 
exit; 
} 
$dom = new DOMDocument('1.0'); 
$dom_sxe = $dom->importNode($dom_sxe, true); 
$dom_sxe = $dom->appendChild($dom_sxe); 
$test2 = $dom->saveXML(); // put string in test2 
$dom -> save('test2.xml'); // save as file 
?>

simpleXML导入DOM:

<?php 
$dom = new domDocument; 
$dom->loadXML('<books><book><title>Great American 
Novel</title></book></books>'); 
if (!$dom) { 
echo 'Error while parsing the document'; 
exit; 
} 
$s = simplexml_import_dom($dom); 
echo $s->book[0]->title; // Great American Novel 
?>
PHP 相关文章推荐
php下正则来匹配dede模板标签的代码
Aug 21 PHP
php和jquery实现地图区域数据统计展示数据示例
Feb 12 PHP
php恢复数组的key为数字序列的方法
Apr 28 PHP
PHP使用正则表达式获取微博中的话题和对象名
Jul 18 PHP
PHP如何使用Memcached
Apr 05 PHP
wordpress网站转移到本地运行测试的方法
Mar 15 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
Apr 15 PHP
PHP swoole和redis异步任务实现方法分析
Aug 12 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
Oct 08 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 PHP
php图片的裁剪与缩放生成符合需求的缩略图
Jan 11 #PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
Jan 11 #PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 #PHP
PHP中header和session_start前不能有输出原因分析
Jan 11 #PHP
PHP跨时区(UTC时间)应用解决方案
Jan 11 #PHP
PHP编程函数安全篇
Jan 08 #PHP
php中定时计划任务的实现原理
Jan 08 #PHP
You might like
PHP include任意文件或URL介绍
2014/04/29 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
地震发生中逃生十大法则
2008/05/12 Javascript
jquery ajax 检测用户注册时用户名是否存在
2009/11/03 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
全面解析Bootstrap布局组件应用
2016/02/22 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
JavaScript之WebSocket技术详解
2016/11/18 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
基于AngularJS的拖拽文件上传的实例代码
2017/07/15 Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
2017/07/25 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
Python urllib3软件包的使用说明
2020/11/18 Python
简单英文演讲稿
2014/01/01 职场文书
30岁生日感言
2014/01/25 职场文书
2014年预备党员学习两会心得体会
2014/03/17 职场文书
如何写早恋检讨书
2014/09/10 职场文书
教师个人年度总结
2015/02/11 职场文书
公司市场部岗位职责
2015/04/15 职场文书
详解GaussDB for MySQL性能优化
2021/05/18 MySQL
排查Tomcat进程假死的问题
2022/05/06 Servers
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers