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);

参考文档   PHP5在线手册 或 W3School

总结   通过上面的介绍,读者可能已经感觉到一些对XML的操作或者函数很熟悉,这是肯定的,毕竟HTML和XML都是DOM文档类型,很多思路是可以照搬的,只是还要看具体的服务器端语言的支持程度。

posted @ 2011-10-14 14:06  Weberpan  阅读(872)  评论(0)    收藏  举报