用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 相关文章推荐
PHPlet在Windows下的安装
Oct 09 PHP
php的ajax框架xajax入门与试用介绍
Dec 19 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
smarty内置函数foreach用法实例
Jan 22 PHP
php实现四舍五入的方法小结
Mar 03 PHP
php动态生成缩略图并输出显示的方法
Apr 20 PHP
PHP实现的增强性mhash函数
May 27 PHP
PHP的Yii框架中View视图的使用进阶
Mar 29 PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 PHP
PHP数据分析引擎计算余弦相似度算法示例
Aug 08 PHP
Laravel框架自定义分页样式操作示例
Jan 26 PHP
PHP之header函数详解
Mar 02 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
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
PHP实现文件上传后台处理脚本
2020/03/04 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
jquery插件 cluetip 关键词注释
2010/01/12 Javascript
基于jquery的用鼠标画出可移动的div
2012/09/06 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
jQuery中wrapAll()方法用法实例
2015/01/16 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
vue 实现边输入边搜索功能的实例讲解
2018/09/16 Javascript
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
简述ES6新增关键字let与var的区别
2019/08/23 Javascript
使用flow来规范javascript的变量类型
2019/09/12 Javascript
jquery简易手风琴插件的封装
2020/10/13 jQuery
antd form表单数据回显操作
2020/11/02 Javascript
VueCli生产环境打包部署跨域失败的解决
2020/11/13 Javascript
python绘制简单折线图代码示例
2017/12/19 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
Python中一般处理中文的几种方法
2019/03/06 Python
Python标准库shutil模块使用方法解析
2020/03/10 Python
python操作redis数据库的三种方法
2020/09/10 Python
vivo智能手机官方商城:vivo
2016/09/22 全球购物
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
大学班级学风建设方案
2014/05/01 职场文书
学生顶撞老师的检讨书
2014/09/17 职场文书
公司员工违纪检讨书
2015/05/05 职场文书
python 中[0]*2与0*2的区别说明
2021/05/10 Python
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS
浅谈MySQL中的六种日志
2022/03/23 MySQL
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python