用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 相关文章推荐
模拟SQLSERVER的两个函数:dateadd(),datediff()
Oct 09 PHP
在同一窗体中使用PHP来处理多个提交任务
May 08 PHP
数据库查询记录php 多行多列显示
Aug 15 PHP
PHP采集相关教程之一 CURL函数库
Feb 15 PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 PHP
深入PHP nl2br()格式化输出的详解
Jun 05 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
php json_encode()函数返回json数据实例代码
Oct 10 PHP
PHP写日志的实现方法
Nov 05 PHP
微信公众平台接口开发入门示例
Dec 24 PHP
使用PHP生成二维码的方法汇总
Jul 22 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 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网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
PHP文件操作实例总结
2016/09/27 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
js loading加载效果实现代码
2009/11/24 Javascript
Javascript动态绑定事件的简单实现代码
2010/12/25 Javascript
js的写法基础分析
2011/01/17 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
jQuery中extend函数详解
2015/07/13 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
jQuery实现给input绑定回车事件的方法
2017/02/09 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python 元类使用说明
2009/12/18 Python
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
python轻松实现代码编码格式转换
2015/03/26 Python
python 通过xml获取测试节点和属性的实例
2018/03/31 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
python实现文本界面网络聊天室
2018/12/12 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
python/Matplotlib绘制复变函数图像教程
2019/11/21 Python
Python与C/C++的相互调用案例
2021/03/04 Python
公司薪酬管理制度
2014/01/31 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
党政领导班子群众路线对照检查材料思想汇报
2014/09/27 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
大学生党课感想
2015/08/11 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书