我有一些遗留代码(不是我写的),它总是包括编码属性,但重新编译到D2010时,TXMLDocument不再包括编码。因为XML数据在标签和数据上都有重音字符,所以TXMLDocument.LoadFromFile只是简单地抛出EDOMParseErros错误,表示在文件中找到了无效字符。相关代码:
Doc := TXMLDocument.Create(nil);
try
Doc.Active := True;
Doc.Encoding := XMLEncoding;
RootNode := Doc.CreateElement('Test', '');
Doc.DocumentElement := RootNode;
<snip>
//Result := Doc.XMl.Text;
Doc.SaveToXML(Result); // Both lines gives the same result
在旧版本的Delphi中,将生成以下行:
<?xml version="1.0" encoding="ISO-8859-1"?>
在D2010中,会生成如下内容:
<?xml version="1.0"?>
如果我手动更改这一行,所有东西都像过去几年一样正常工作。
更新:XMLEncoding是一个常量,并且定义如下
XMLEncoding = 'ISO-8859-1';
CreateProcessingInstruction
方法正在执行双重任务。 - Rob Kennedy