button1是执行动态创建XmlDocument的例子:
procedure TFrm_E2BTest.Button1Click(Sender: TObject); 
var 
  r1 : IXMLNode; 
  xml1: TXmlDocument; 
begin 
  xml1:=TXmlDocument.Create(nil); 
  xml1.LoadFromFile('D:\Pa.xml'); 
  xml1.Active:=True; 
  r1:=xml1.DocumentElement; //执行这一步时系统报内存访问错误(AV) 
  Frm_E2BTest.Label1.caption:=r1.NodeName; 
  XML1 := nil; 
end; 
------------------------
button2是执行拖放XmlDocument组件的例子
procedure TFrm_E2BTest.Button2Click(Sender: TObject); 
var 
  r2 : IXMLNode; 
begin 
  XMLtest.LoadFromFile('D:\Pa.xml'); 
  XMLtest.Active:=Active; 
  r2:=XMLtest.DocumentElement; //正常通过 
  Frm_E2BTest.Label1.caption:=r2.NodeName;  //能正确显示根节点名称 
end;
----------------------------------------------------------
 文件 "Pa.xml"内容是没问题的以上代码用拖放的XmlDocument组件就一切OK,
但自己动态创建XmlDocument组件读取根节点时就报内存错误 。
请问我代码问题出在哪里啊?该怎么修改呢 ?谢谢!

解决方案 »

  1.   

    xml1:=TXmlDocument.Create(Self); 
      

  2.   


    procedure TFrm_E2BTest.Button1Click(Sender: TObject);
    var
      r1 : IXMLNode;
      xml1: IXMLDocument;
    begin
      xml1:=TXmlDocument.Create(nil);
      xml1.LoadFromFile('D:\Pa.xml');
      xml1.Active:=True;
      r1:=xml1.DocumentElement; //执行这一步时系统报内存访问错误(AV)
      Frm_E2BTest.Label1.caption:=r1.NodeName;
      XML1 := nil;
    end; 
      

  3.   

    function SaveExpToString(AExp: TAExp): string;
    var
      XMLDocument: IXMLDocument;
      xNode, xNode2: IXMLNode;
      ss: TStringStream;
    begin
      Result := '';
      ss := TStringStream.Create('');
      ss.Position := 0;
      ss.Size := 0;
      try
        XMLDocument := NewXMLDocument;
        XMLDocument.Encoding := 'GBK';
        XMLDocument.Options := [doNodeAutoIndent];
        XMLDocument.NodeIndentStr := '  ';
        xNode := XMLDocument.AddChild('Exps');    xNode2 := xNode.AddChild('ExportExpression');
        xNode2.Attributes['name'] := '0';
        if AExp.Callback then
          xNode2.Attributes['callback'] := 'true'
        else
          xNode2.Attributes['callback'] := 'false';
        xNode2 := xNode2.AddChild('exp');
        xNode2.Attributes['resType'] := ADataTypeToStr(AExp.ResType);
        xNode2.Attributes['expType'] := AExpTypeToStr(AExp.ExpType);
        xNode2.Attributes['exptext'] := AExp.FExpText;    xNode2 := xNode.AddChild('SaveExpression');
        xNode2.Attributes['name'] := '0';
        if AExp.Callback then
          xNode2.Attributes['callback'] := 'true'
        else
          xNode2.Attributes['callback'] := 'false';
        xNode2 := xNode2.AddChild('exp');
        xNode2.Attributes['resType'] := ADataTypeToStr(AExp.ResType);
        xNode2.Attributes['expType'] := AExpTypeToStr(AExp.ExpType);
        xNode2.Attributes['exptext'] := AExp.FExpText;    XMLDocument.SaveToStream(ss);    Result := ss.DataString;
      finally
        ss.Free;
      end;
    end;
      

  4.   

    XMLDocument的Create参数不能为nil,你可以这样创建:
    Panel := TPanel.Create(nil);
    XMLDoc := TXMLDocument.Create(Panel);
    这样就可以了。