用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 相关文章推荐
关于时间计算的结总
Dec 06 PHP
PHP与SQL注入攻击[一]
Apr 17 PHP
PHP如何编写易读的代码
Jul 10 PHP
PHP 字符串正则替换函数preg_replace使用说明
Jul 15 PHP
PHP写杨辉三角实例代码
Jul 17 PHP
phpmyadmin3 安装配置图解教程
Mar 29 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
May 10 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
PHP实现扎金花游戏之大小比赛的方法
Mar 10 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
PHP清除缓存的几种方法总结
Sep 12 PHP
PHP内存溢出优化代码详解
Feb 26 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
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
php 文件上传类代码
2011/08/06 PHP
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
如何使用angularJs
2017/05/08 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
Javascript基于OOP实实现探测器功能代码实例
2020/08/26 Javascript
JS实现密码框效果
2020/09/10 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
Python全局变量用法实例分析
2016/07/19 Python
django1.11.1 models 数据库同步方法
2018/05/30 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
查看jupyter notebook每个单元格运行时间实例
2020/04/22 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
.NET是怎么支持多种语言的
2015/02/24 面试题
蜜蜂引路教学反思
2014/02/04 职场文书
境外导游求职信
2014/02/27 职场文书
安全责任书模板
2014/07/22 职场文书
学校领导班子成员查摆问题及整改措施
2014/10/28 职场文书
2014年学习部工作总结
2014/11/12 职场文书
大学生个人学习总结
2015/02/15 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书