使用TXMLDocument的时候疑问重重,如以下代码所示,thisDoc看上去只能被访问一次,当第二次访问的时候,则会抛出异常,导致访问失败。以下代码执行到18行时正常,并且i的值是1属于正确值,但是重复执行一次,执行到19行时,则抛出异常,以下是异常信息Exception captured:EAccessViolation
Message:Access violation at address 022238DD in module 'HISISDK.dll'. Read of address 6579223D
procedure testProcedure();
var
  sXml:string;
  thisDoc:TXMLDocument;
  i:Integer;
begin
  sXml := '<bubble version="1.0" vin="1">' +
            '<vin0 stream="3">' +
              '<stream0 name="720p.264" size="1280x720" x1="yes" x2="yes" x4="yes" />' +
              '<stream1 name="360p.264" size="640x360" x1="yes" x2="yes" x4="yes" />' +
              '<stream2 name="qvga.264" size="320x240" x1="yes" x2="yes" x4="yes" />' +
            '</vin0>' +
            '</bubble>';
  thisDoc := TXMLDocument.Create(nil);
  thisDoc.LoadFromStream(TStringStream.Create(sXml));
  try
  begin
    i := thisDoc.ChildNodes.Count;
    i := thisDoc.ChildNodes.Count;
    i := thisDoc.ChildNodes.Count;
  end;
  except
    on E:Exception do tracelog('Exception captured:' + E.ClassName + #13#10 +
      'Message:' + E.Message);
  end;
  thisDoc.Free;
end;delphiTXMLDocument读取

解决方案 »

  1.   

    刚才测试,貌似TXMLDocument.ChildNodes不可重入,只能调用一次,看不到它的内部代码,有什么规则限制了么?如果要重入的话,需要怎么操作?类似IXMLNode.ChildNodes是否也不可重入的?这个是属于这一系列的接口的调用规则,还是属于bug?
      

  2.   

    TXMLDocument太差了,用NativeXML吧http://download.csdn.net/detail/hsfzxjy/5664569
      

  3.   

    NativeXML功能强大许多,还是使用Delphi自带的控件好。
      

  4.   

    procedure TXmlFactory.OpenXml(const sFileName: string);
    begin
      if not Assigned(FXmlDoc) then
      begin
        FXmlDoc := CoDOMDocument.Create();    if FXmlDoc.load(sFileName) then
          FActive := True
        else
          FActive := False;    if FActive then
          FileName := sFileName
        else
          FileName := '';
      end;
    end;procedure TXmlFactory.CloseXml;
    begin
      if Assigned(FXmlDoc) then FXmlDoc := nil;
      FileName := '';
      FActive := False;
    end;
      

  5.   

      楼主,我也和你一样,用TXmlDocument遇到很多问题,
      现已改为NativeXML,用的很顺手。
      

  6.   

    嗯,还是用NativeXML了,果然好用