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);
}
}
}