这个问题我之前问过: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
内容:
<?xml version="1.0" encoding="gb2312" ?>
- <menu>
<file ID="21219602" name="不要在我寂寞的时候说爱我&飞飞(伤感版)" singer="(_別鈎鈏ヾ誐" hot="74260" img="http://fms5.sogua.com/mv/pic/20071120/241120720071120101957.jpg" url="http://zxyvsjyf.sogua.com/mv/view/21219602.htm" />
..
.. //中间省略了许多
<file ID="21220763" name="茶花" singer="on茶花迷" hot="110644" img="http://fms6.sogua.com/mv/pic/20071122/343842920071122035235.jpg" url="http://dengxiao57.sogua.com/mv/view/21220763.htm" />
</menu>我的代码是这样的:
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,出错提示是:<file ID="21220763" name="茶花" singer="on茶花迷" hot="110644" img="http://fms6.sogua.com/mv/pic/20071122/343842920071122035235.jpg" url="http://dengxiao57.sogua.com/mv/view/21220763.htm" /> 这里有无效的unicode character
我用oXml.encoding:='utf-8';它竟然报内存地址越界..我狂吐血了..为什么呀??不是这样改变xml的编码的?????
把xml的这句删除就可以解析了,但是每次xml都是动态改变的,所以有可能还有像上面出现的情况...
都急死了..
请各位恩人帮帮忙吧!!!
可是现在又有了问题了,主要是TXMLDocument解析xml时提示:invalid unicode character
我的xml是这样的:
地址为:http://home.sogua.com/index/service/wonderful30.aspx
内容:
<?xml version="1.0" encoding="gb2312" ?>
- <menu>
<file ID="21219602" name="不要在我寂寞的时候说爱我&飞飞(伤感版)" singer="(_別鈎鈏ヾ誐" hot="74260" img="http://fms5.sogua.com/mv/pic/20071120/241120720071120101957.jpg" url="http://zxyvsjyf.sogua.com/mv/view/21219602.htm" />
..
.. //中间省略了许多
<file ID="21220763" name="茶花" singer="on茶花迷" hot="110644" img="http://fms6.sogua.com/mv/pic/20071122/343842920071122035235.jpg" url="http://dengxiao57.sogua.com/mv/view/21220763.htm" />
</menu>我的代码是这样的:
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,出错提示是:<file ID="21220763" name="茶花" singer="on茶花迷" hot="110644" img="http://fms6.sogua.com/mv/pic/20071122/343842920071122035235.jpg" url="http://dengxiao57.sogua.com/mv/view/21220763.htm" /> 这里有无效的unicode character
我用oXml.encoding:='utf-8';它竟然报内存地址越界..我狂吐血了..为什么呀??不是这样改变xml的编码的?????
把xml的这句删除就可以解析了,但是每次xml都是动态改变的,所以有可能还有像上面出现的情况...
都急死了..
请各位恩人帮帮忙吧!!!
又是没一个人答!!!....
伤心ing...
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替换了
呵呵..
不过我还是不明白为什么TXMlDocument为什么不能应对unicode和gb2312的转换呢?
难道又是delphi的一个bug??
要是这样那就真是郁闷了.上个礼拜做的indy里的idftp也有bug,都让我碰上了..
再这样搞下去 以后不搞delphi了...