var
  XMLDOMDocument: IXMLDOMDocument;
begin
if FileExists(FileName) then
  if XMLDOMDocument.load(FileName) then
  begin
  ......
  end;
这句:XMLDOMDocument.load(FileName)在本机(WINXP中文版)下运行没有出错,在客户(系统是WINDOWS SERVER2003)那里有时会出错。 
是什么原因?

解决方案 »

  1.   

    看看MSXML是什么版本的, 升级到6.0试试
      

  2.   

    cncharles(旺仔),怎样MSXML是什么版本?
      

  3.   

    Import Type Library后可以看到,借题问一下,呵呵,哪里有msxml6.dll(升级到6.0)?
      

  4.   

    有木有可能是xml被占用?比如正在动态生成?
      

  5.   

    R31339XXX(GAO XING JIU HAO),这么巧,问得好,呵呵。
      

  6.   

    erhan()∶
    有木有可能是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;
    有没有可能。
      

  7.   

    楼主把动态生成XMLDOMDOCUMENT对象的那段代码贴出来吧..问题关键该在那儿.
      

  8.   

    我的意思是说,那个xml文件是不是有可能被别的程序以独占的方式打开呢?
      

  9.   

    halfdream(哈欠),动态生成XMLDOMDOCUMENT对象:
    =================================
    var
      XMLDOMDocument: IXMLDOMDocument;
    begin
      ......
      XMLDOMDocument:= CoDOMDocument.Create;
      with XMLDOMDocument do
      begin
        async := True;
        validateOnParse := False;
      end;
      ......
    end;
      

  10.   

    erhan():
    我的意思是说,那个xml文件是不是有可能被别的程序以独占的方式打开呢?
    ============================================在此期间没有打开过xml文件。
      

  11.   

    不同系统里面可能安装的MSXML DOM版本是不同的..于是,简单的指定一个版本的创建是不妥的.在DELPHI自带的TXMLDOCMENT中是按下面这样简单方法解决的..
    就是从高版本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;
      

  12.   

    既然你发消息了,我就仔细看看问题 :)根据踩在哈欠的肩膀上:你检查一下本级MSXML的版本和客户的MSXML的版本,或者你将你本机和客户机的MSXML都升级到最新版本,或者使用TXMLDocument控件,不要自己创建接口。
      

  13.   

    那,可人,我怎样检查系统当前MSXML的版本呢?
      

  14.   

    现在改用TXMLDocument控件是不行了,只能用最新版本了,可是我找了一段时间没有找到,请问哪有最新的版本?谢谢。
      

  15.   

    Sorry,系统,我指的是Windows系统,就是说怎样检查Windows系统当前MSXML的版本.
      

  16.   

    看来楼主没仔细看我的回复...我的意思是让楼主去看TXMLDOCUMENT里面代码是如何解决这个问题的..没让你去用TXMLDOCUMENT
    而且解决方法相当简单..
    就是从高版本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}';