xml讀取、保存不同類型打印配置的代碼[原創]

  一開始做這個題目時,找了好多資料都沒有很好的介紹,不知道是我找東西的技術不好還是怎麼的,我找東西的技術不好嗎?NO!!花了點工夫,終於解決了這個問題,高興的同時也對網上這方面的資料的實用性深有感觸,正好有這麼個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);
    }
 }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章