常にエンコーディング属性を含むレガシー コード (私は書いていません) がありますが、それを 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';