var
XMLDOMDocument: IXMLDOMDocument;
begin
if FileExists(FileName) then
if XMLDOMDocument.load(FileName) then
begin
......
end;
这句:XMLDOMDocument.load(FileName)在本机(WINXP中文版)下运行没有出错,在客户(系统是WINDOWS SERVER2003)那里有时会出错。
是什么原因?
XMLDOMDocument: IXMLDOMDocument;
begin
if FileExists(FileName) then
if XMLDOMDocument.load(FileName) then
begin
......
end;
这句:XMLDOMDocument.load(FileName)在本机(WINXP中文版)下运行没有出错,在客户(系统是WINDOWS SERVER2003)那里有时会出错。
是什么原因?
有木有可能是xml被占用?比如正在动态生成?
=============================================
xml应该没有占用,XMLDOMDocument系统启动时就生成了;
大致功能实现如下∶
while true do
begin
FileName := GetFileNameFromList();//从list中获取下一个xml文件,GetFileNameFromList里面没有用到XMLDOMDocument。
if FileExists(FileName) then
if XMLDOMDocument.load(FileName) then
begin
......
ReadXmlFile();//读取xml文件。
end;
......
end;
有没有可能。
=================================
var
XMLDOMDocument: IXMLDOMDocument;
begin
......
XMLDOMDocument:= CoDOMDocument.Create;
with XMLDOMDocument do
begin
async := True;
validateOnParse := False;
end;
......
end;
我的意思是说,那个xml文件是不是有可能被别的程序以独占的方式打开呢?
============================================在此期间没有打开过xml文件。
就是从高版本DOM到低版本开始尝试创建..
楼主可以按这样来解决.
function CreateDOMDocument: IXMLDOMDocument;
begin
Result := TryObjectCreate([CLASS_DOMDocument40, CLASS_DOMDocument30,
CLASS_DOMDocument26, msxml.CLASS_DOMDocument]) as IXMLDOMDocument;
if not Assigned(Result) then
raise DOMException.Create(SMSDOMNotInstalled);
end;
而且解决方法相当简单..
就是从高版本DOM到低版本开始尝试创建IXMLDOMDocument几个版本的CLASS_ID 给你列在下面:const
CLASS_DOMDocument26: TGUID = '{F5078F1B-C551-11D3-89B9-0000F81FE221}';
CLASS_DOMDocument30: TGUID = '{F5078F32-C551-11D3-89B9-0000F81FE221}';
CLASS_DOMDocument40: TGUID = '{88D969C0-F192-11D4-A65F-0040963251E5}';