如何解码/编码XML?

时间:2014-07-20 07:13:54

标签: xml delphi-7

我正在向XML文档发送请求,然后我需要解析一些数据,有时在这个文档中是这样的符号: enter image description here

如果此符号在此文档中 - 数据不会记录到我的字符串变量...

抱歉我的英语不好......

var
response:string;
begin
response:=IdHTTP1.GET('http:// site.com/document.xml');
// parsing data...
end;

如何解码/编码此符号?这是这个符号的编码/解码变体(例如) - ?('&#123456')(数字在XML文档中一直在变化) - 这显示了我在线解码器/编码器,但是如何编码/解码它Delphi的?

1 个答案:

答案 0 :(得分:2)

XML对字符集敏感,因此作为字符集编码的字节传输。您正在以AnsiString的形式下载XML(因为您使用的是Ansi的Ansi版本),因此TIdHTTP.Get()会将原始字节解码为Unicode,然后在返回给您时将其转换为Ansi。这可能会改变/破坏XML内容,或至少使XML内容与XML的序言不兼容(Indy在这些转换期间不会改变)。

在处理XML时,应该为XML解析器提供与服务器发送完全相同的原始XML数据。让解析器而不是Indy处理XML的原始字节。为此,请使用下载到TIdHTTP.Get()的{​​{1}}的重载版本,而不是返回TStream。下载到String,然后将其传递给TMemoryStream方法,例如:

XMLDocument.LoadFromStream()