用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 相关文章推荐
第七节 类的静态成员 [7]
Oct 09 PHP
邮箱正则表达式实现代码(针对php)
Jun 21 PHP
解析php类的注册与自动加载
Jul 05 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
Aug 09 PHP
phpstorm编辑器乱码问题解决
Dec 01 PHP
php选择排序法实现数组排序实例分析
Feb 16 PHP
PHP加密解密函数详解
Oct 28 PHP
PHP Static延迟静态绑定用法分析
Mar 16 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
May 09 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
Mar 31 PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
Nov 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编程开发“虚拟域名”系统
2006/10/09 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
重构Javascript代码示例(重构前后对比)
2013/01/23 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
python连接sql server乱码的解决方法
2013/01/28 Python
简洁的十分钟Python入门教程
2015/04/03 Python
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
python导入时小括号大作用
2017/01/10 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python判断变量是否为Json格式的字符串示例
2017/05/03 Python
python实现两张图片的像素融合
2019/02/23 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
给同事的道歉信
2014/01/11 职场文书
优秀广告词大全
2014/03/19 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
销售会议开幕词
2015/01/28 职场文书
2015年消防工作总结
2015/04/24 职场文书
2016暑期社会实践新闻稿
2015/11/25 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python
排查MySQL生产环境索引没有效果
2022/04/11 MySQL
如何利用python创作字符画
2022/06/25 Python