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 中使用随机数的三个步骤
Oct 09 PHP
PHP4实际应用经验篇(1)
Oct 09 PHP
Apache2 httpd.conf 中文版
Dec 06 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
Dec 29 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
php实现快速排序的三种方法分享
Mar 12 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
Apr 24 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
Nov 19 PHP
php+mysql实现用户注册登陆的方法
Jan 03 PHP
thinkphp中字符截取函数msubstr()用法分析
Jan 09 PHP
功能强大的php文件上传类
Aug 29 PHP
PHP文件系统管理(实例讲解)
Sep 19 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的5个入手程序
2006/11/23 PHP
php printf输出格式使用说明
2010/12/05 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
Javascript基础教程之break和continue语句
2015/01/18 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
微信小程序checkbox组件使用详解
2018/01/31 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
elementUI select组件value值注意事项详解
2019/05/29 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
微信小程序实现左滑删除效果
2020/11/18 Javascript
python有证书的加密解密实现方法
2014/11/19 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
Python登录系统界面实现详解
2019/06/25 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
工商学院毕业生个人自我评价
2013/09/19 职场文书
幼儿园园长自我鉴定
2013/10/22 职场文书
生产内勤岗位职责
2013/12/07 职场文书
兼职业务员岗位职责
2014/01/01 职场文书
党的作风建设心得体会
2014/10/22 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers