关于网友提出的“ 晕了再不解决就没饭碗了救小弟一命!!!”问题疑问,本网通过在网上对“ 晕了再不解决就没饭碗了救小弟一命!!!”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 晕了再不解决就没饭碗了救小弟一命!!!描述:
这个问题我之前问过:http://topic.csdn.net/u/20071029/16/fee853dc-8df8-4ad7-b6d2-36e3d9e7579d.html
可是现在又有了问题了,主要是TXMLDocument解析xml时提示:invalid unicode character
我的xml是这样的:
地址为:http://home.sogua.com/index/service/wonderful30.aspx
内容:
-
我的代码是这样的:
try
MemoryStream:=TMemoryStream.Create ;
Idhttp:=TIdhttp.Create(nil);
try
Idhttp.Get('http://home.sogua.com/index/service/wonderful30.aspx',MemoryStream);
oXml := TXMLDocument.Create(self);
//oxml.encoding:='utf-8'; 此句报错了,说是内存地址越界了.不知道为什么会这样..??晕
oXml.LoadFromStream(MemoryStream);
oXml.Active:=true;
except
Application.MessageBox('解析xml失败:','提示',64);
end;
finally
MemoryStream.Free ;
Idhttp.Free ;
end;
因为这个xml是动态改变的,encoding又是gb2312,出错提示是:
我用oXml.encoding:='utf-8';它竟然报内存地址越界..我狂吐血了..为什么呀??不是这样改变xml的编码的?????
把xml的这句删除就可以解析了,但是每次xml都是动态改变的,所以有可能还有像上面出现的情况...
都急死了..
请各位恩人帮帮忙吧!!!
解决方案1:
uses
msxml, idhttp;
procedure TForm1.FormCreate(Sender: TObject);
var
FData: TStringStream;
FIdhttp: TIdHTTP;
oXml: IXMLDOMDocument;
FNode: IXMLDOMNode;
begin
FData:=TStringStream.Create('');
FIdhttp:=TIdhttp.Create(nil);
try
FIdhttp.Get('http://home.sogua.com/index/service/wonderful30.aspx',FData);
oXml := CoDOMDocument.Create;
//oxml.encoding:='utf-8'; 此句报错了,说是内存地址越界了.不知道为什么会这样..??晕
if not oXml.loadXML(FData.DataString) then
Application.MessageBox('解析xml失败:','提示',64);
Memo1.Text := FData.DataString;
FNode := oXml.selectSingleNode('menu/file/@name');
if Assigned(FNode) then
Caption := FNode.nodeValue;
finally
FData.Free;
FIdhttp.Free;
end;
end;
呵呵,没问题阿,偶不喜欢用TXMLDocument,用IXMLDOMDocument替换了