一、XML的概念
XML 即可扩展标记语言(Extensible Markup Language),是一种平台无关的表示数据的方法
标记语言:是一种将文本以及文本相关的其他信息结合起来,展现出文档结构和数据处理细节的电脑文字编码
二、XML的作用和规则
不同的业务系统之间如何方便的进行数据交换,让开发人员煞费苦心。通常用的数据存放方式,常用的有两种:数据库和文件。如果使用数据库操作那么需要统一数据库,过程复繁琐。
所有能不能使用一个文件来做,能不能找到一个可以保持数据结构的文件来存放数据,XML的出现使我们有了一个很好的解决方法。
对比分析XML、HTML 、HTTP概念
三、XML作用:存储和传输数据
<?xml version="1.0"?>
<books>
<book no="1">
<author>泽瓦斯</author>
<title>PHP Web 2.0开发实战</title>
<introduce>主要介绍ZendFramework,作者代码值得学习</introduce>
</book>
<book no="2">
<author>麦克阿瑟</author>
<title>PHP高级程序设计:模式、框架与测试</title>
<introduce>深入设计模式、PHP标准库和JSON</introduce>
</book>
</books>
作用:
在不同的系统中共享和交互数据
数据结构化和具有可读性
四、读取XML的数据
1、DOM的方式读取XML文档
Xml文件:
Stu.xml
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student no="1">
<name>zhangsan</name>
<age>20</age>
</student>
<student no="2">
<name>lisi</name>
<age>21</age>
</student>
</students>
Php程序
<?php
//创建dom对象
$dom=new DOMDocument();
//加载xml文件
$dom->load("stu.xml");
//将最外层节点读入
$students=$dom->getElementsByTagName("students");
//遍历
foreach($students as $key=>$val){
//读取下一层节点
$stu=$val->getElementsByTagName("student");
//遍历下一层节点
foreach($stu as $k=>$v){
//获取name节点对象
$name=$v->getElementsByTagName("name");
//获取节点对象的值
$na=$name->item(0)->nodeValue;
//获取age节点
$age=$v->getElementsByTagName("age");
//获取节点的值
$ag=$age->item(0)->nodeValue;
}
}
?>
五、Php创建xml文件
创建XML:
声明DOM对象 :new DOMDocument( )
创建节点:createElement ( )
给子节点赋值
创建文本节点 :createTextNode()
添加子节点:appendChild( )
创建节点属性:createAttribute( )
给属性节点赋值
创建包含<![CDATA[数据]]>的节点:createCDATASection
例子:
1、从数据库中查询数据得到数据数组
2、将数组中的数据循环遍历
3、循环的过程中创建节点,并存储数据数据
4、将XML保存为文件
注意:
使用DomDocument生成XML文件
创建节点使用createElement方法,
创建文本内容使用createTextNode方法,
添加子节点使用appendChild方法,
创建属性使用createAttribute方法
例子:
<?PHP
$data_array = array(
array(
‘title‘ => ‘title1‘,
‘content‘ => ‘content1‘,
‘pubdate‘ => ‘2014/9/2‘,
),
array(
‘title‘ => ‘title2‘,
‘content‘ => ‘content2‘,
‘pubdate‘ => ‘2014/9/2‘,
)
);
// 属性数组
$attribute_array = array(
‘title‘ => array(
‘size‘ => 1
)
);
// 创建一个XML文档并设置XML版本和编码。。
$dom=new DomDocument(‘1.0‘, ‘utf-8‘);
// 创建根节点
$article = $dom->createElement(‘article‘);
$dom->appendchild($article);
foreach ($data_array as $data) {
$item = $dom->createElement(‘item‘);
$article->appendchild($item);
create_item($dom, $item, $data, $attribute_array);
}
//输出生成的xml文件
echo $dom->saveXML();
//在磁盘上保存
$dom->save("order.xml");
function create_item($dom, $item, $data, $attribute) {
if (is_array($data)) {
foreach ($data as $key => $val) {
// 创建元素
$$key = $dom->createElement($key);
$item->appendchild($$key);
// 创建元素值
$text = $dom->createTextNode($val);
$$key->appendchild($text);
if (isset($attribute[$key])) {
// 如果此字段存在相关属性需要设置
foreach ($attribute[$key] as $akey => $row) {
// 创建属性节点
$$akey = $dom->createAttribute($akey);
$$key->appendchild($$akey);
// 创建属性值节点
$aval = $dom->createTextNode($row);
$$akey->appendChild($aval);
}
} // end if
}
} // end if
} // end function
?>