如何将soap响应保存到xml?我尝试使用tstringlist,filestream,创建了xml文件,但是,我得到了
无法将(null)类型的varinat转换为(olestr)类型
我尝试过这个简单的code.The响应不是empty.The文件大小为40 is。德尔菲XE3.
procedure TForm1.HTTPRIO1AfterExecute(const MethodName: string;
SOAPResponse: TStream);
var xml : TStringlist;
begin
xml := TStringlist.create;
try
soapresponse.Position:=0;
xml.LoadFromStream(SOAPResponse);
xml.SaveToFile('...file.xml');
finally
xml.Free;
end;
end;这就是问题(空行)吗?还是不?
...
- <leiras>
- <![CDATA[
* Socket AM2 for AMD Athlon™ 64FX / 64X2 / 64 and Sempron processors
* ULi M1697
1. Supports FSB 1000MHz (2.0GT/s), Hyper-Transport Technology and AMD Cool 'n' Quiet Technology
2. Untied Overclocking : During Overclocking, FSB enjoys better margin due to fixed PCIE/ PCI Buses
3. Supports Dual Channel DDRII800/667/533, 4 x DIMM slots, with maximum capacity up to 8GB
4. Hybrid Booster - ASRock Safe Overclocking Technology
5. Supports Dual Graphics XLI
6. 1 x PCI Express x16 slot
7. 1 x PCI Express x 8 slot, to adopt 2nd PCI Express x 16 VGA card and other PCI Express x4, x2, x1 interface cards
8. 2 x PCI Express x1 slots
9. 4 x Serial ATA II 3.0Gb/s, support RAID (RAID 0, 1, 0+1, JBOD and RAID 5), NCQ, AHCI and "Hot Plug" functions
10. 2 x eSATAII 3.0Gb/s, support NCQ, AHCI and "Hot Plug" functions
11. HDMI_SPDIF header, providing SPDIF audio output to HDMI VGA card, allows the system to connect HDMI Digital TV/projector/LCD devices.
12. 7.1 Channel with High Definition Audio
13. Windows Vista™ Premium Logo Hardware Ready
14. ASRock 8CH_eSATAII I/O: 2 eSATAII ports, HD 7.1 channel audio jacks
]]>
</leiras>
<kepek />
...我尝试了NullStrictConvert := False;没有转换错误,但是exe使用1GB内存,直到我关闭它。
...
var xml : TStringlist;
begin
xml := TStringlist.create;
NullStrictConvert := False;
try
soapresponse.Position:=0;
...发布于 2013-02-19 16:43:09
你有没有试着直接把你的流倒入一个文件,看看里面有什么?
procedure TForm1.HTTPRIO1AfterExecute(const MethodName: string; SOAPResponse: TStream);
var
FS: TFileStream;
begin
FS := TFileStream.Create('C:\Downloaded.xml', fmCreate);
try
FS.CopyFrom(SoapResponse, 0);
finally
FS.Free;
end;
end;发布于 2013-02-19 16:30:55
尝试对一个临时字符串变量使用流的Read方法:
procedure TForm1.HTTPRIO1AfterExecute(const MethodName: string; SOAPResponse: TStream);
var
s: string[200];
ds: string;
n: Longint;
xml: TStringList;
begin
SOAPResponse.Position := 0;
xml := TStringList.Create;
try
ds := EmptyStr;
while SOAPResponse.Position < SOAPResponse.Size do begin
n := SOAPResponse.Read(s[1], 200);
SetLength(s, n);
xml.Text := xml.Text + ds;
end;
xml.SaveToFile('...file.xml');
finally
xml.Free;
end;
end;发布于 2013-02-20 07:44:01
真奇怪。
也许这个例子有帮助。
我正在做几乎相同的事情,记录对TMemo的响应和请求。
另外,我的‘from’例程从外部的SOAPRequest TStringStream中填充实际的TStringStream:
procedure TFrmTestEWS.HTTPRIOBeforeExecute(const MethodName: string; SOAPRequest: TStream);
var
TS: TStringStream;
S : String;
begin
// 1. Fill request
SOAPRequest.Position := 0;
FSoapData.Position := 0;
SOAPRequest.CopyFrom(FSoapData,FSoapData.Size);
SOAPRequest.Size := FSoapData.Size;
// 2. Logging
S := 'Request:' + #13#10#13#10;
TS := TStringStream.Create(S);
try
TS.Position := Length(S);
FSoapData.Position := 0;
TS.CopyFrom(FSoapData,FSoapData.Size);
TS.Position := 0;
MmoLog.Lines.LoadFromStream(TS);
finally
TS.Free;
end;
end;
procedure TFrmTestEWS.HTTPRIOAfterExecute(const MethodName: string; SOAPResponse: TStream);
var
TS: TStringStream;
S : String;
begin
S := MmoLog.Text + #13#10#13#10 + 'Response:' + #13#10#13#10;
TS := TStringStream.Create(S);
try
TS.Position := Length(S);
SOAPResponse.Position := 0;
TS.CopyFrom(SOAPResponse,SOAPResponse.Size);
TS.Position := 0;
MmoLog.Lines.LoadFromStream(TS);
finally
SOAPResponse.Position := 0;
TS.Free;
end;
end;https://stackoverflow.com/questions/14954623
复制相似问题