用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正则走开
Mar 15 PHP
PHP 动态随机生成验证码类代码
Apr 09 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
Jun 09 PHP
使用PHP实现Mysql读写分离
Jun 28 PHP
对PHP语言认识上需要避免的10大误区
Jun 12 PHP
国产PHP开发框架myqee新手快速入门教程
Jul 14 PHP
php制作简单模版引擎
Apr 07 PHP
PHP身份证校验码计算方法
Aug 10 PHP
CodeIgniter框架验证码类库文件与用法示例
Mar 18 PHP
详解PHP序列化和反序列化原理
Jan 15 PHP
Yii框架自定义数据库操作组件示例
Nov 11 PHP
详解Go与PHP的语法对比
May 29 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图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
php简单分页类实现方法
2015/02/26 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
php算法实例分享
2015/07/14 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
xtree.js 代码
2007/03/13 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
详解javascript replace高级用法
2019/02/17 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
2019/09/06 Javascript
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
python局部赋值的规则
2013/03/07 Python
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
Python中logging模块的用法实例
2014/09/29 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
Python 解析xml文件的示例
2020/09/29 Python
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
洗发水广告词
2014/03/13 职场文书
党支部承诺书范文
2014/03/28 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
十岁生日答谢词
2015/01/05 职场文书
工作失误检讨书
2015/01/26 职场文书
交通事故和解协议书
2015/01/27 职场文书
博物馆观后感
2015/06/05 职场文书
2016新年感言
2015/08/03 职场文书