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文件,关闭。

  • 相关阅读:
    js对象数组(JSON) 根据某个共同字段 分组
    一个 函数 用来转化esSearch 的range 条件
    关于 vuex 报错 Do not mutate vuex store state outside mutation handlers.
    android listview 重用view导致的选择混乱问题
    android SDK和ADT的更新
    Android中adb push和adb install的使用区别
    pycharm中添加扩展工具pylint
    su Authentication failure解决
    Putty以及adb网络调试
    有关android源码编译的几个问题
  • 原文地址:https://www.cnblogs.com/QDuck/p/378705.html
Copyright © 2011-2022 走看看