摘要:本文主要是介绍古老的XML数据格式的发展及应用,其中PHP对XML文件进行读写操作的方法一共有四种,分别是:字符串方式直接读写、DOMDocument读写、XMLWrite写和XMLReader读、SimpleXML读写。
一、xml的简介1、XML是可扩展性标记语言。
2、XML的设计宗旨是为了传输数据。
3、XML标签没有被预定义,需要自行定义。
二、XML的应用1、XML可以当做配置文件。
2、XML可以当小型数据库。
3、XML是跨平台的语言,用于各个语言之间的数据交互。
三、XML语法规范1、声明一个处理指令<?xml version='1.0' encoding='utf-8'?>
2、文档为树状结构,只能有一个根目录
3、标签必须合法,标签必须闭合(单双标签),大小写一致,不能交叉。
4、属性必须有值,属性值必须有引号。
5、特殊符号使用符号实体(单引号'双引号"空格 &符号&大于号)
6、有特殊符号的大段内容使用表示
四、代码示例如下<?xml version='1.0' encoding='utf-8'?>
yun
18
book
19
五、js操作XML1、创建空的XML对象
try{
xmlDoc=new ActiveXObject('Microsoft.XML'); // IE创建xmlDoc
}catch(e){
xmlDoc=document.implementation.createDocument('','',null); // opera,mozilla,firefox等创建xmlDoc
}
2、加载XML文件
try{
xmlDoc.async = false; //关闭异步加载
xmlDoc.load = ('yunbook.xml');
}catch(e){
}
3、获取XML文件的节点
var person = xmlDoc.getElementsByTagName('person');//取到所有标签为person的节点
var per1 = person[0]; // 取到第一个studnet1
var per1Info = per1.children; // 取到第一个student的所有元素子节点
var name = studentnote[0].childNodes[0].nodeValue; // 取到第一个节点name的第一个节点的值
window.alert(name);
六、用PHP字符串方式读写XML文件#写
$mysqli = mysqli_connect('localhost', 'root', '123456', 'yunbook');
if(mysqli_connect_errno()) die('database connect fail:' . mysqli_connect_error());
$sql = 'select * from book order by starttime';
$res = mysqli_query($mysqli, $sql);
$books = array();
while($row = mysqli_fetch_array($res)) {
$books[] = $row;
}
//XML标签配置
$xmlTag = array(
'starttime',
'endtime',
'name'
);
$str = "n";
foreach($study as $v) {
$str .= "tn";
foreach($xmlTag as $x) {
$str .= "tt" . $v[$x] . "".$x.">n";
}
$str .= "tn";
}
$str .= '';
$file = './write_book.xml';
file_put_contents($file, $str);
#读
七、用PHP的DOMDocument方式读取XML#xmlDOM读取方法
1、实例化一个xmldom对象
$xmlDoc = new DOMDocument('1.0','utf-8');
2、加载XML文件
$xmlDoc->load('person.xml'); // 加载本地xml文件
$xmlDoc->loadXML('string'); // 加载xml字符串
3、通过getElementsByTagName('') 方法获取DOMNodeList对
$xmlDoc->getElementsByTagName('name');
4、通过调用DOMNodeList里的item()方法得到DOMElement对象
$xmlDoc->getElementsByTagName('name')->item(0);
5、通过nodeValue属性,来获取节点的值
$xmlDoc->getElementsByTagName('name')->item(0)->nodeValue;
八、用PHP的 SimpleXML方式读取XML#simplexml读取方法
1、获取XML对象
$simXML = simplexml_load_file('person.xml');
2、调用对象的属性值从而获得xml标签值
$simXML->per1[0]->name;
九、XMLWriter和XMLReader读写XML文件<?php
$mysqli = mysqli_connect('localhost', 'root', '123456', 'yunbook');
if(mysqli_connect_errno()) die('database connect fail:' . mysqli_connect_error());
$sql = 'select * from study order by starttime';
$res = mysqli_query($mysqli, $sql);
$study = array();
while($row = mysqli_fetch_array($res)) {
$study[] = $row;
}
//XML标签配置
$xmlTag = array(
'starttime',
'endtime',
'school'
);
$xml = new XMLWriter();
$xml->openUri('./write_WR.xml');
$xml->setIndentString(' ');
$xml->setIndent(true);
$xml->startDocument('1.0', 'utf8');
$xml->startElement('first');
foreach($study as $s) {
$xml->startElement('period');
foreach($xmlTag as $x) {
$xml->startElement($x);
$xml->text($s[$x]);
$xml->endElement();
}
$xml->endElement();
}
$xml->endElement();
$xml->endDocument();
$xml->flush();
十、总结这四种方法中,
字符串的方式是最原始的方法,其中开发效率比较低下。
SimpleXML和DOM扩展是属于基于树的解析器,把整个文档存储为树的数据结构中,需要把整个文档都加载到内存中才能工作,所以当处理大型XML文档的时候,性能会剧减。
XMLReader则是属于基于流的解析器,它不会一次把整个文档加载到内存中,而是每次分别读取其中的一个节点并允许实时与之交互,这种方式效率高,而且占用内存少。
所以,本文推荐采用XMLWriter和XMLReader的方式读和写XML文件。