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

  • 相关阅读:
    Java 多线程系列02
    Java 多线程系列01
    java io流03 字符流
    java JDBC系列
    java io流02 字节流
    Helidon使用心得
    camel 解析
    Spring 源码分析
    java代码实现分页功能
    SpringBoot Tomcat启动报错
  • 原文地址:https://www.cnblogs.com/QDuck/p/378705.html
Copyright © 2020-2023  润新知