这个问题我之前问过: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都是动态改变的,所以有可能还有像上面出现的情况...
都急死了..
请各位恩人帮帮忙吧!!!

解决方案 »

  1.   

    靠!!!
    又是没一个人答!!!....
    伤心ing...
      

  2.   

    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替换了
      

  3.   

    恩人那恩人..终于解决了..
    呵呵..
    不过我还是不明白为什么TXMlDocument为什么不能应对unicode和gb2312的转换呢?
    难道又是delphi的一个bug??
    要是这样那就真是郁闷了.上个礼拜做的indy里的idftp也有bug,都让我碰上了..
    再这样搞下去 以后不搞delphi了...