xml读取、保存不同类型打印配置的代码[原创]

  2004.10.15发表于blog.csdn.net/zxub

  一开始做这个题目时,找了好多资料都没有很好的介绍!花了点工夫,终于解决了这个问题,高兴的同时也对网上这方面的资料的实用性深有感触,正好有这么个Blog,就放上来,希望对大家有点帮助。

function openFile(fileName)     //打开文本文件,以字串返回文件内容
{
    var fso, ts, s;
    var ForReading = 1;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    ts = fso.OpenTextFile(fileName, ForReading);
    s = ts.ReadAll();
    ts.Close();
     return s;
}
function saveFile(fileName,xmlStr)//保存文本文件
{
   var fso, tf,f;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   try
 {
    f = fso.GetFile(fileName);
 f.attributes =0;
 }
 catch(e){}
   tf = fso.CreateTextFile(fileName, true);

   tf.Write(xmlStr);
   tf.Close();
}
function saveXMLFile(pfilePath,xmlDom)   //存为XML文件
{
 var xmlStr=xmlDom.xml;
 xmlStr=xmlStr.replace("<?xml version=\"1.0\"?>","<?xml version=\"1.0\" encoding=\"gb2312\"?>");
 //alert(pfilePath+","+xmlStr);
 saveFile(pfilePath,xmlStr);
}
function loadDom(fileName)
{
 var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
 xmlDoc.async = false;
 xmlDoc.resolveExternals = false;
 xmlDoc.load(fileName);
 return xmlDoc;

}
//依据XML串,创建DOM对象
function createDom(xmlStr)
{
  var dom = new ActiveXObject("Msxml2.DOMDocument.3.0");
  //创建DOM实例,并装载文件
    dom.async="false";
  dom.loadXML(xmlStr);
     return dom;
}
function fileExist(FileFullPath) //判断文件是否存在
{
 var fso = new ActiveXObject("Scripting.FileSystemObject");
 if (fso.FileExists(FileFullPath))
   {return true;}
 else
   {return false;}
}
function createXmlCfg(pTagName,pKeyName,pValue) //创建一个包含相关信息的新XML文件
{
 var xmlStr="<?xml version=\"1.0\" encoding=\"gb2312\"?>";
 xmlStr+="<Report/>";
 var xmlDom=createDom(xmlStr);
 var root=xmlDom.documentElement;
 var infoNode=xmlDom.createNode(1,pTagName, "");
 root.appendChild(infoNode);
 var tmpNode=null;
 var obj=null;
 tmpNode=xmlDom.createNode(1,pKeyName,"");
 tmpNode.text=pValue;
 infoNode.appendChild(tmpNode);
 saveXMLFile(GetXmlFilePath("userdefine"),xmlDom);  
}

function addXmlTag(pTagName,pKeyName,pValue) //向XML文件中插入一个包含相关信息的新节点
{
 var xmlDom=createDom(openFile(GetXmlFilePath("userdefine")));
 var root=xmlDom.documentElement;
 var infoNode=xmlDom.createNode(1,pTagName, "");
 root.appendChild(infoNode);
 var tmpNode=null;
 var obj=null;
 tmpNode=xmlDom.createNode(1,pKeyName,"");
 tmpNode.text=pValue;
 infoNode.appendChild(tmpNode);
 var xmlStr=xmlDom.xml;
    xmlStr=xmlStr.replace("<?xml version=\"1.0\"?>","<?xml version=\"1.0\" encoding=\"gb2312\"?>")
    saveFile(GetXmlFilePath("userdefine"),xmlStr);
}
function addXmlKey(pTagName,pKeyName,pValue)   //向XML中的相关节点插入新信息
{
 var xmlDom=createDom(openFile(GetXmlFilePath("userdefine")));
    var pNodeList=xmlDom.getElementsByTagName(pTagName);
 var pchildNode=pNodeList.item(0);
 var tmpNode=null;
 var obj=null;
 tmpNode=xmlDom.createNode(1,pKeyName,"");
 tmpNode.text=pValue;
 pchildNode.appendChild(tmpNode);
 var xmlStr=xmlDom.xml;
    xmlStr=xmlStr.replace("<?xml version=\"1.0\"?>","<?xml version=\"1.0\" encoding=\"gb2312\"?>")
    saveFile(GetXmlFilePath("userdefine"),xmlStr);
}
 function GetXmlFilePath(FileType) //取得配置文件的路径:FileType代表文件类型,default为default.xml,userdefine同理
    {
     var dir = location.href.substring(0,location.href.lastIndexOf('?')+1);
     var XmlFilePath = location.href.substring(dir.length,location.href.length+1);
  XmlFilePath=XmlFilePath.replace("file:///","");
  XmlFilePath=XmlFilePath.substring(0,XmlFilePath.lastIndexOf("/"));
  XmlFilePath=XmlFilePath.substring(0,XmlFilePath.lastIndexOf("/"));
  switch (FileType) {
   case "default":
    XmlFilePath=XmlFilePath+"/config/default.xml";
    break;
      case "userdefine":
    XmlFilePath=XmlFilePath+"/config/userdefine.xml";
    break
      default:
    alert("不清楚是默认文件或用户自定义文件!");
    return false;
   }   
  XmlFilePath=XmlFilePath.replace("/","//");
     return(XmlFilePath);
    }

function setValueByName(FileType,pTagName,pKeyName,pValue)  //XML文件定位赋值
{
 var xmlDom;
 if (fileExist(GetXmlFilePath(FileType)))
   { 
     xmlDom=createDom(openFile(GetXmlFilePath(FileType)));
   }
  else
   {
    //alert("用户配置文件不存在,将创建新文件");
    //创建文件
    createXmlCfg(pTagName,pKeyName,pValue);
    alert("已保存修改信息,以后将按修改后的配置进行A4纸打印!");
    return;
   }
   try
   {
  var pNodeList=xmlDom.getElementsByTagName(pTagName);
  if (pNodeList.item(0)==null)
    {
     //alert("不存在该表信息!");
     addXmlTag(pTagName,pKeyName,pValue);
     alert("已保存修改信息,以后将按修改后的配置进行A4纸打印!");
     return;
    }
  var pchildNode=pNodeList.item(0).firstChild;
  for (j=1;;j++)
   {
    if (pchildNode.nodeName==pKeyName)
    {
     pchildNode.text=pValue;
     break;
    }
    pchildNode=pchildNode.nextSibling;
   }
  var xmlStr=xmlDom.xml;
  xmlStr=xmlStr.replace("<?xml version=\"1.0\"?>","<?xml version=\"1.0\" encoding=\"gb2312\"?>")
  saveFile(GetXmlFilePath(FileType),xmlStr);
  alert("已保存修改信息,以后将按修改后的配置进行A4纸打印!");
   }
   catch(e)
   {
    //alert("该表打印配置节点不存在!");
    addXmlKey(pTagName,pKeyName,pValue);
    alert("已保存修改信息,以后将按修改后的配置进行A4纸打印!");
    return;
   }
}
function getValueByName(FileType,pTagName,pKeyName)  //取得特定节点的值
{
 var curFileType=FileType;//当前配置文件类型。
 var xmlDom;
 if (fileExist(GetXmlFilePath(FileType)))
   {
    xmlDom=createDom(openFile(GetXmlFilePath(FileType)));
    }
  else
    {
    if (fileExist(GetXmlFilePath("default")))
      {
        //alert("用户自定义设置文件不存在,将取默认设置!");
        xmlDom=createDom(openFile(GetXmlFilePath("default")));
     curFileType="default";
   }
    else
      {
     alert("不存在打印设置文件,请在线更新系统以取得默认设置文件,或在页面调整中保存自定义设置以创建用户自定义打印配设置文件!");
     return false;
   }
    }
 try
 {
  var pNodeList=xmlDom.getElementsByTagName(pTagName);
  //alert(pNodeList.item(0).nodeName);
  var pchildNode=pNodeList.item(0).firstChild;
  var pValue;
  for (j=1;;j++)
   {
    if (pchildNode.nodeName==pKeyName)
    {
     pValue=pchildNode.text;
     return pValue;
     break;
    }
    pchildNode=pchildNode.nextSibling;
   }
 }
 catch(e)
 {
  if (curFileType=="default") //默认配置文件中不存在对该表的配置
    {
     alert("打印设置文件中不存在对该表的设置,请在线更新系统以取得最新默认设置文件,或在页面调整中保存自定义设置以创建用户自定义打印配设置文件!");
     return false;
    }
  else
    {
     //alert("自定义打印设置中不存在对该表的打印设置,将取默认值!");
     return getValueByName("default",pTagName,pKeyName);
    }
 }
}

原文地址:https://www.cnblogs.com/zxub/p/173601.html