zoukankan      html  css  js  c++  java
  • 用FSO操作 xml

    由于用js操作本地xml文件之后save时会permission denied,所以据我所知就只能通过FSO来做。而用FSO,基本上就与文件是否是xml无关。

    xml文件:

    <root>
      <parent>
        <child1>one</child1>
        <child2>one</child2>
      </parent>
      <parent>
        <child1>two</child1>
        <child2>two</child2>
      </parent>
      <parent>
        ...
      </parent>
    </root>

    var temp;//要操作的数据

    //添加节点
    function add(root,parent,child1,child2){
     try{
      var fso = new ActiveXObject("Scripting.FileSystemObject");
      var fileOpen = fso.OpenTextFile("*.xml",1);
      var fileContent = fileOpen.ReadAll();
      fileOpen.close();

      if(fileContent.toString().indexOf(temp) !=-1){
       alert(temp+"was already in data.");
      }else{
       fileContent = fileContent.replace("</"+root+">","");
       fileContent += "<"+parent+"><"+child1+">";
       fileContent += ...;
       fileContent += "</"+child1+"><"+child2+">";
       fileContent += ...;
       fileContent += "</"+child2+"></"+parent+"></"+root+">";
       var fileWrite = fso.OpenTextFile("*.xml",2)
       fileWrite.write(fileContent);
       fileWrite.close();
       alert("add successfully!")
      }
     }catch(e){
      alert("fail to add.");
     }
    }


    //删除节点
    function del(root,parent,child1,child2){
     try{
      if( confirm("are you sure to delete symbol:"+temp+"?" ) ){
       var fso = new ActiveXObject("Scripting.FileSystemObject");
       var fileOpen = fso.OpenTextFile("*.xml",1);
       var fileContent = fileOpen.ReadAll();
       fileOpen.close();
       
       var parentArr = fileContent.split("</"+parent+">");
       var symbolPos = -2;//不一定是2,只要<0即可
       for (var i=0; i<parentArr.length-1; i++){
        if(parentArr[i].indexOf(temp) != -1){
        symbolPos = i;
        continue;
        }
        parentArr[i] += "</"+parent+">"; 
       }
       if (symbolPos == -2){
        alert(temp+" not found in data.")
       }else{
        if(symbolPos == 0){
         parentArr[0] = "<"+root+">";
        }else{
         parentArr.splice(symbolPos,1);
        }
        fileContent = parentArr.toString().replace(/,/g,"")
        var fileWrite = fso.OpenTextFile("*.xml",2);
        fileWrite.write(fileContent);
        fileWrite.close();
        alert("deleted successfully!");
       }
      }
     }catch(e){
      alert("fail to delete.");
     }

    基本思路:

    添加节点
    1:读入原先xml文件所有字符,保存为fileContent;
    2:去除根结点的封闭节点,即</root>;
    3:fileContent += <parent><child1>..</child1><child2>...</child2></parent>;
    4:fileContent += </root>;
    5:写入xml文件,关闭。
    基本上就是用手动输入来代替xml的CreateNode。

    删除节点
    1:读入原先xml文件所有字符,保存为fileContent;
    2:以parent来分割fileContent,保存为parentArr[];
    3:循环搜索parentArr[i],利用indexOf(parentArr[i])来判断要 删除的节点里的内容 是否出现在parentArr[i];如果没有找到,则parentArr[i] += parent用来补上split时丢失的parent;如果找到了,则不用 += parent, 并且记录i的值;
    4:parentArr.splice(i,1),删去节点;
    5:parentArr.toString().replace(/,/g,""),用来去除逗号;
    6:写入xml文件,关闭。

  • 相关阅读:
    作品-系统-[原生开发]新蓝景CRM管理系统
    作品-网站-[二次开发]汇名惠商城
    js声明json数据,打印json数据,遍历json数据,转换json数据为数组
    js 鼠标滚动到某屏时,加载那一屏的数据,仿京东首页楼层异步加载模式
    js转换数据类型为浮点型,并取两位小数点
    php判断是否是微信客户端的浏览器访问
    百度地图API地理位置和坐标转换
    php 对象中连贯执行方法
    php extract 函数的妙用 数组键名为声明为变量,键值赋值为变量内容
    php 获取远程图片保存到本地
  • 原文地址:https://www.cnblogs.com/QDuck/p/378705.html
Copyright © 2011-2022 走看看