从函数返回XML文档

从函数返回XML文档,xml,delphi,delphi-xe5,Xml,Delphi,Delphi Xe5,我正在尝试使用Delphi加载远程托管的XML文件。我假设我可以从流中加载它。我有一个获取URL流的FetchRemote类: function TFetchRemote.StreamFromUrl(filename : String) : TMemoryStream; var memStream : TMemoryStream; http : TIdHttp; begin http := TIdHttp.Create(); memStream := TMemoryStream.

我正在尝试使用Delphi加载远程托管的XML文件。我假设我可以从流中加载它。我有一个获取URL流的FetchRemote类:

function TFetchRemote.StreamFromUrl(filename : String) : TMemoryStream;
var
  memStream : TMemoryStream;
  http : TIdHttp;
begin
  http := TIdHttp.Create();
  memStream := TMemoryStream.Create;
  http.Get(url + filename, memStream);
  Result := memStream;
end;
我正在尝试使用返回的内存流加载远程XML:

function TFetchRemoteXML.XMLFromUrl(filename : string) : TXMLDocument;
var
  memStream : TMemoryStream;
begin
  memStream := fetchRemote.StreamFromURL(filename);
  try
    memStream.Position := 0;
    Result := TXMLDocument.LoadFromStream(memStream);
  finally
    memStream.Free;
  end;
end;
我尝试编译时遇到的错误是:在结果返回行上

[dcc32错误]FetchRemoteXML.pas31:E2076此形式的方法调用仅允许用于类方法或构造函数

我有一个类似的类/方法来获取远程位图,它工作得很好。我只是看不出在获取XML时我做错了什么。我在Delphi帮助中尝试了以下示例,并尝试从中获得一些提示,但没有成功。如果您有任何建议,我将不胜感激,我是来自Ruby背景的Delphi新手。我正在使用RAD Studio XE 5

提前谢谢

LoadFromStream方法是一种实例方法。这意味着您必须实例化TXMLDocument的一个实例,并在该实例上调用LoadFromStream

Result := TXMLDocument.Create(Owner);
Result.LoadFromStream(...);
您需要提供对象的所有者,如构造函数的中所述

或者将nil传递给构造函数,并切换到IXMLDocument而不是TXMLDocument

LoadFromStream方法是一个实例方法。这意味着您必须实例化TXMLDocument的一个实例,并在该实例上调用LoadFromStream

Result := TXMLDocument.Create(Owner);
Result.LoadFromStream(...);
您需要提供对象的所有者,如构造函数的中所述

或者将nil传递给构造函数,并切换到IXMLDocument而不是TXMLDocument


我尝试调用xml:=TXMLDocument.Createnil;结果:=xml.LoadFromStreammemStream;但它返回一条不同的错误消息:[dcc32 error]FetchRemoteXML.pas33:E2010不兼容类型:“TXMLDocument”和“procedure,untyped pointer或untyped parameter”不起作用。编译器解释了原因。照我在回答中说的做。工作得很有魅力!非常感谢。我尝试调用xml:=TXMLDocument.Createnil;结果:=xml.LoadFromStreammemStream;但它返回一条不同的错误消息:[dcc32 error]FetchRemoteXML.pas33:E2010不兼容类型:“TXMLDocument”和“procedure,untyped pointer或untyped parameter”不起作用。编译器解释了原因。照我在回答中说的做。工作得很有魅力!非常感谢。您的代码表明您可能不知道Delphi中的对象生存期管理规则。您可能需要花一点时间,现在就了解这一点。您的代码表明您可能不知道Delphi中的对象生命周期管理规则。你可能想花点时间,现在就开始学习。