XML:简单后台数据存储入门
前言 做前端开发的,难免和后台打交道,做数据交换和存储可能是最常见的情况。有时如果只是一点简单的数据,比如我的个人首页留言功能,需要将昵称、邮箱、日期和留言提交到后台端存储,此时我觉得没必要特意建一个数据表来存储。再比如我有多个页面调用留言功能,那岂不是要多建几个表或者特意做个标志字段?此时可以考虑使用XML进行简单数据存储,特别是对于一些没有数据库功能的个人网站,这是一个不错的替代方案。
技术 PHP+XML。个人使用PHP5,其对XML的支持已经很完善,下文基于PHP5的环境,PHP4不敢保证。一般来说除了PHP其他后台语言对XML也有相应的支持,下文涉及的函数只需稍作变通即可。
示例 作为使用示例的XML文档结构如下:
使用
- 新建XML文档 不管是读还是写,操作之前都要新建一个XML文档对象:
$xmlDoc = new DOMDocument();
- 读取XML文档 读取XML文档有多种方法,比如使用DOM库,SAX等,个人推荐使用XPath来读取文档,毕竟用习惯CSS看XPath还是很容易的,对其他方法感兴趣的可以查看该网址。
首先,载入文档:
$xmlDoc->load('myComment.xml');接着,构建XPath选择符:
$nicknamePath = "/comments/comment/nickname";
$timePath = "/comments/comment/time";
$contentPath = "/comments/comment/content";然后,创建XPath对象并进行具体查询获取数据:
$xPath = new DomXPath($xmlDoc);
$nicknames = $xPath->query($nicknamePath);
$time = $xPath->query($timePath);
$contents = $xPath->query($contentPath);将数据分组提取出来并显示:
$itemsNum = $nicknames->length; //获取总共有几组数据
for($i=0; $i<$fetchNum; $i++){
echo $nicknames->item($i)->nodeValue . '<br />';
echo $time->item($i)->nodeValue . '<br />';
echo $contents->item($i)->nodeValue . '<br />';
} - 写入XML文档
首先,如果不存在XML文档,则从根节点开始构造文档:
if(!file_exists('myComment.xml')){
$root = $xmlDoc->createElement('comments');
$xmlDoc->appendChild($root);
}如果存在XML文档,则参考读取XML的步骤,先载入文档,再通过XPath方法获取节点数组,通过如 ->item(0) 的形式获取对应节点:
$root = $xPath->query($rootPath)->item(0);
构建具体节点并将值存储进去:
$newNode = $xmlDoc->createElement('comment');
$root->appendChild($newNode);
$nicknameNode = $xmlDoc->createElement('nickname');
$nicknameNode->appendChild($xmlDoc->createTextNode($nickname));
$newNode->appendChild($nicknameNode);
//其他节点类似添加最后将修改后的文档保存:
$xmlDoc->save('myComment.xml'); - 其他 PHP还支持其他实用的XML函数,比如我们要求每次插入的节点都在最前面,我们可以首先获取父节点,以及现有的第一个子节点,这个通过XPath容易实现。然后就可以利用 insertBefore 方法来实现了,关键语句如下:
$firstPath = '/comments/comment[1]';
$parent->insertBefore($newNode, $firstChild);
总结 通过上面的介绍,读者可能已经感觉到一些对XML的操作或者函数很熟悉,这是肯定的,毕竟HTML和XML都是DOM文档类型,很多思路是可以照搬的,只是还要看具体的服务器端语言的支持程度。
浙公网安备 33010602011771号