php生成xml简单实例代码


Posted in PHP onDecember 16, 2009

当处理基于XML应用程序时,开发者经常需要建立XML编码数据结构。例如,Web中基于用户输入的XML状态模板,服务器请求XML语句,以及基于运行时间参数的客户响应。
尽管XML数据结构的构建比较费时,但如果使用成熟的PHP DOM应用程序接口,一切都会变得简单明了。本文将向你介绍PHP DOM应用程序接口的主要功能,演示如何生成一个正确的XML完整文件并将其保存到磁盘中。
创建文档类型声明
一般而言,XML声明放在文档顶部。在PHP中声明十分简单:只需实例化一个DOM文档类的对象并赋予它一个版本号。查看程序清单A:
程序清单 A

<?php 
// create doctype 
$dom = new DOMDocument("1.0"); 
// display document in browser as plain text 
// display document in browser as plain text 
// for readability purposes 
header("Content-Type: text/plain"); 
// save and display tree 
echo $dom->saveXML(); 
?>

请注意DOM文档对象的saveXML()方法。稍后我再详细介绍这一方法,现在你只需要简单认识到它用于输出XML文档的当前快照到一个文件或浏览器。在本例,为增强可读性,我已经将ASCII码文本直接输出至浏览器。在实际应用中,可将以text/XML头文件发送到浏览器。
如在浏览器中查看输出,你可看到如下代码:
<?xml version="1.0"?>
添加元素和文本节点
XML真正强大的功能是来自其元素与封装的内容。幸运的是,一旦你初始化DOM文档,很多操作变得很简单。此过程包含如下两步骤:
对想添加的每一元素或文本节点,通过元素名或文本内容调用DOM文档对象的createElement()或createTextNode()方法。这将创建对应于元素或文本节点的新对象。
通过调用节点的appendChild()方法,并把其传递给上一步中创建的对象,并在XML文档树中将元素或文本节点添加到父节点。
以下范例将清楚地演示这2步骤,请查看程序清单B。
程序清单 B
<?php 
// create doctype 
$dom = new DOMDocument("1.0"); 
// display document in browser as plain text 
// for readability purposes 
header("Content-Type: text/plain"); 
// create root element 
$root = $dom->createElement("toppings"); 
$dom->appendChild($root); 
// create child element 
$item = $dom->createElement("item"); 
$root->appendChild($item); 
// create text node 
$text = $dom->createTextNode("pepperoni"); 
$item->appendChild($text); 
// save and display tree 
echo $dom->saveXML(); 
?>

这 里,我首先创建一个名字为<toppings>的根元素,并使它归于XML头文件中。然后,我建立名为<item>的元素并使它 归于根元素。最后,我又创建一个值为“pepperoni”的文本节点并使它归于<item>元素。最终结果如下:
<?xml version="1.0"?> 
<toppings> 
<item>pepperoni</item> 
</toppings>

如果你想添加另外一个topping,只需创建另外一个<item>并添加不同的内容,如程序清单C所示。
程序清单C
<?php 
// create doctype 
$dom = new DOMDocument("1.0"); 
// display document in browser as plain text 
// for readability purposes 
header("Content-Type: text/plain"); 
// create root element 
$root = $dom->createElement("toppings"); 
$dom->appendChild($root); 
// create child element 
$item = $dom->createElement("item"); 
$root->appendChild($item); 
// create text node 
$text = $dom->createTextNode("pepperoni"); 
$item->appendChild($text); 
// create child element 
$item = $dom->createElement("item"); 
$root->appendChild($item); 
// create another text node 
$text = $dom->createTextNode("tomato"); 
$item->appendChild($text); 
// save and display tree 
echo $dom->saveXML(); 
?>

以下是执行程序清单C后的输出:
<?xml version="1.0"?> 
<toppings> 
<item>pepperoni</item> 
<item>tomato</item> 
</toppings>

添加属性
通过使用属性,你也可以添加适合的信息到元素。对于PHP DOM API,添加属性需要两步:首先用DOM文档对象的createAttribute()方法创建拥有此属性名字的节点,然后将文档节点添加到拥有属性值的属性节点。详见程序清单D。
程序清单 D
<?php 
// create doctype 
$dom = new DOMDocument("1.0"); 
// display document in browser as plain text 
// for readability purposes 
header("Content-Type: text/plain"); 
// create root element 
$root = $dom->createElement("toppings"); 
$dom->appendChild($root); 
// create child element 
$item = $dom->createElement("item"); 
$root->appendChild($item); 
// create text node 
$text = $dom->createTextNode("pepperoni"); 
$item->appendChild($text); 
// create attribute node 
$price = $dom->createAttribute("price"); 
$item->appendChild($price); 
// create attribute value node 
$priceValue = $dom->createTextNode("4"); 
$price->appendChild($priceValue); 
// save and display tree 
echo $dom->saveXML(); 
?>

输出如下所示:
<?xml version="1.0"?> 
<toppings> 
<item price="4">pepperoni</item> 
</toppings>

添加CDATA模块和过程向导
虽然不经常使用CDATA模块和过程向导,但是通过调用DOM文档对象的createCDATASection()和createProcessingInstruction()方法, PHP API 也能很好地支持CDATA和过程向导,请见程序清单E。
程序清单 E
<?php 
// create doctype 
// create doctype 
$dom = new DOMDocument("1.0"); 
// display document in browser as plain text 
// for readability purposes 
header("Content-Type: text/plain"); 
// create root element 
$root = $dom->createElement("toppings"); 
$dom->appendChild($root); 
// create child element 
$item = $dom->createElement("item"); 
$root->appendChild($item); 
// create text node 
$text = $dom->createTextNode("pepperoni"); 
$item->appendChild($text); 
// create attribute node 
$price = $dom->createAttribute("price"); 
$item->appendChild($price); 
// create attribute value node 
$priceValue = $dom->createTextNode("4"); 
$price->appendChild($priceValue); 
// create CDATA section 
$cdata = $dom->createCDATASection(" Customer requests that pizza be sliced into 16 square pieces "); 
$root->appendChild($cdata); 
// create PI 
$pi = $dom->createProcessingInstruction("pizza", "bake()"); 
$root->appendChild($pi); 
// save and display tree 
echo $dom->saveXML(); 
?>

输出如下所示:
<?xml version="1.0"?> 
<toppings> 
<item price="4">pepperoni</item> 
<![CDATA[ 
Customer requests that pizza be sliced into 16 square pieces 
]]> 
<?pizza bake()?> 
</toppings>

保存结果
一旦已经实现你的目标,就可以将结果保存在一个文件或存储于PHP的变量。通过调用带有文件名的save()方法可以将结果保存在文件中,而通过调用saveXML()方法可存储于PHP的变量。请参考以下实例(程序清单F):
程序清单 F
<?php 
// create doctype 
$dom = new DOMDocument("1.0"); 
// create root element 
$root = $dom->createElement("toppings"); 
$dom->appendChild($root); 
$dom->formatOutput=true; 
// create child element 
$item = $dom->createElement("item"); 
$root->appendChild($item); 
// create text node 
$text = $dom->createTextNode("pepperoni"); 
$item->appendChild($text); 
// create attribute node 
$price = $dom->createAttribute("price"); 
$item->appendChild($price); 
// create attribute value node 
$priceValue = $dom->createTextNode("4"); 
$price->appendChild($priceValue); 
// create CDATA section 
$cdata = $dom->createCDATASection(" Customer requests that pizza be 
sliced into 16 square pieces "); 
$root->appendChild($cdata); 
// create PI 
$pi = $dom->createProcessingInstruction("pizza", "bake()"); 
$root->appendChild($pi); 
// save tree to file 
$dom->save("order.xml"); 
// save tree to string 
$order = $dom->save("order.xml"); 
?>

下面是实际的例子,大家可以测试下。
xml.php(生成xml)
<? 
$conn = mysql_connect('localhost', 'root', '123456') or die('Could not connect: ' . mysql_error()); 
mysql_select_db('vdigital', $conn) or die ('Can\'t use database : ' . mysql_error()); 
$str = "SELECT id,username FROM `admin` GROUP BY `id` ORDER BY `id` ASC"; 
$result = mysql_query($str) or die("Invalid query: " . mysql_error()); 
if($result) 
{ 
$xmlDoc = new DOMDocument(); 
if(!file_exists("01.xml")){ 
$xmlstr = "<?xml version='1.0' encoding='utf-8' ?><message></message>"; 
$xmlDoc->loadXML($xmlstr); 
$xmlDoc->save("01.xml"); 
} 
else { $xmlDoc->load("01.xml");} 
$Root = $xmlDoc->documentElement; 
while ($arr = mysql_fetch_array($result)){ 
$node1 = $xmlDoc->createElement("id"); 
$text = $xmlDoc->createTextNode(iconv("GB2312","UTF-8",$arr["id"])); 
$node1->appendChild($text); 
$node2 = $xmlDoc->createElement("name"); 
$text2 = $xmlDoc->createTextNode(iconv("GB2312","UTF-8",$arr["username"])); 
$node2->appendChild($text2); 
$Root->appendChild($node1); 
$Root->appendChild($node2); 
$xmlDoc->save("01.xml"); 
} 
} 
mysql_close($conn); 
?>

test.php(应用测试)
<? 
$xmlDoc = new DOMDocument(); 
$xmlDoc->load("http://localhost/xml/xml.php"); 
$x=$xmlDoc->getElementsByTagName('name'); 
for ($i=0; $i<=$x->length-1; $i++) 
{ 
if(strpos($x->item($i)->nodeValue,"fang")!==false) 
{ 
echo $x->item($i)->parentNode->childNodes->item(1)->nodeValue; 
} 
} 
?>
PHP 相关文章推荐
几个学习PHP的网址
Nov 25 PHP
PHP读取目录下所有文件的代码
Jan 07 PHP
php中使用Imagick实现图像直方图的实现代码
Aug 30 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
使用PHP接收POST数据,解析json数据
Jun 28 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
Dec 24 PHP
php定义数组和使用示例(php数组的定义方法)
Mar 29 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
Jun 22 PHP
解析PHP之提取多维数组指定列的方法
Jan 03 PHP
php实现购物车功能(以大苹果购物网为例)
Mar 09 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 PHP
thinkphp5.1 框架钩子和行为用法实例分析
May 25 PHP
PHP 基本语法格式
Dec 15 #PHP
php遍历目录viewDir函数
Dec 15 #PHP
php csv操作类代码
Dec 14 #PHP
PHP开发过程中常用函数收藏
Dec 14 #PHP
将文件夹压缩成zip文件的php代码
Dec 14 #PHP
php入门教程 精简版
Dec 13 #PHP
php实现的仿阿里巴巴实现同类产品翻页
Dec 11 #PHP
You might like
如何在PHP中使用Oracle数据库(3)
2006/10/09 PHP
第十四节--命名空间
2006/11/16 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
Python常见工厂函数用法示例
2018/03/21 Python
Django开发中的日志输出的方法
2018/07/02 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
利用python求积分的实例
2019/07/03 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
QQ空间主人寄语大全
2014/04/12 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
乡镇群众路线整改落实情况汇报
2014/10/28 职场文书
2014财务年度工作总结
2014/11/11 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
清洁工个人总结
2015/03/04 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers