一个关于Delphi XML处理单元的BUG

使用delphi的XML处理单元 XMLDoc XMLIntf

在获取XML文本内容的时候, 高版本的Delphi会丢失编码描述....在D7上却是正常的, 下面是测试源码:

procedure TForm1.Button1Click(Sender: TObject);
var
  nXMLDoc: IXMLDocument;
  i: Integer;
  nMS: TMemoryStream;
  nSS: TStringStream;
  nStr: string;
begin
  nXMLDoc := TXMLDocument.Create(nil);
  nXMLDoc.Active := True;
  nXMLDoc.Encoding := ‘GB2312‘;
  nXMLDoc.AddChild(‘test‘);
  for i := 0 to 4 do
    nXMLDoc.DocumentElement.AddChild(‘测试‘).NodeValue := i;
  with Memo1 do
  begin
    Lines.Clear;
    Lines.Add(‘---- nXMLDoc.XML.Text ----‘);
    Lines.Add(‘‘);
    Lines.Add(nXMLDoc.XML.Text);
  end;
  nMS := TMemoryStream.Create;
  nXMLDoc.SaveToStream(nms);
  nms.Position := 0;
  with Memo2 do
  begin
    Lines.Clear;
    Lines.LoadFromStream(nms);
    Lines.Insert(0, ‘‘);
    Lines.Insert(0, ‘---- nXMLDoc.SaveToStream ----‘);
  end;
  nMS.Free;
  nXMLDoc.SaveToXML(nStr);
  with Memo3 do
  begin
    Lines.Clear;
    Lines.Add(‘---- nXMLDoc.SaveToXML ----‘);
    Lines.Add(‘‘);
    Lines.Add(nStr);
  end;
end;

下面是同样的代码分别在Delphi7 和Delphi2010的执行效果

对比可以发现, XML.Text和SaveToXML这2个方法, 在2010上, 输入以后 encoding="GB2312" 的编码信息会丢失

使用XE5的版本测试也一样会丢失, 只有在D7上是正常的

Delphi7结果

Delph2010结果

http://www.cnblogs.com/hs-kill/p/3829183.html

时间: 2024-11-03 03:45:20

一个关于Delphi XML处理单元的BUG的相关文章

一个C#的XML数据库访问类

原文地址:http://hankjin.blog.163.com/blog/static/33731937200942915452244/ 程序中不可避免的要用到配置文件或数据,对于数据量比较小的程序,部署数据库花费的时间就显得浪费了,因此用XML来存储不妨为一个很好的办法,而且结合C#的DataSet,我们可以很轻易的封装出一个代码简单而功能强大的数据访问类XMLConfigconfig.xml<root>  <table1>    <rowName1>hello&l

一个让服务器CPU飙升的BUG。找了2天才发现。

昨天升级了站点.发现一升级上去,就发现站点服务器CPU开始占用接近100%.但是数据库服务器变化不大 还原回更新之前的代码.立马CPU降低.一开始已经是增加的缓存机制有了问题,采用数据库读取,放到线上依旧. 接着以为是数据统计有问题,删除掉还是一样.最后的最后,通过看到工作线程,发现登录请求也蛮多的. 然后这个登录代码更新到旧版本.就OK了.这次版本对登录进行了重构.直接上代码 错误代码中 登录后直接是使用了user.BbbID,造成了500错误.IIS对这个500错误也会有CPU损耗.于是就飙

delphi XML 原来可以玩接口

以下代码旨在 脱离TXMLDocument 操作 xml unit Unit3; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls; type TForm3 = class(TForm) XMLDocument1: TXMLDocument; Button1: T

一个简单的XML与数组之间的转换

xml是网络使用最多的数据交换格式,所以,不掌握怎么操作它,又有蛋疼的了. php中可以操作xml的类/函数很多,个人认为最简单的是SimpleXMLElement这个类,它的使用就跟其名字一样:简单.当然要想全面自如的操作xml,还得借助其他的类.SimpleXMLElement主要是对xml的进行节点的添加和获取,以及输出整个xml文本内容,但是对于实现一个简单的与数组之间的内容转换,已经足够了. 比如我们现在在接一个sdk,对方接口传过来的是一个简单的xml格式数据,我们需要取到它,并作一

一个java解析xml的简单例子

java解析xml,主要是通过Dom4j实现的,很多场合都会用到此功能,需要解析XML文件. 下面是一个简单的解析XML文件的例子: import java.util.Iterator; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * 解析XML文件 * * @author sunlightcs

Maven学习之创建web项目在pom.xml遇到的bug

今天再学习maven的时候,遇到了一个小bug,决定分享上来说不定对刚学习maven的你有一定的帮助! maven版本:apache-maven-3.5.4 在创建web项目时出现 Cannot detect Web Project version. Please specify version of Web Project through Maven project prope--的错误 解决方案: 第一步  修改项目的jdk版本,改成你想要的版本,新建的maven web项目默认是jdk1.

编程经验:一个由&lt;Windows.h&gt;引起的bug~

1. 问题描述 最近遇到一个莫名其妙的bug,上网查找,没有找到正确的解决办法,难道大家都没遇到?于是我说一说自己是怎么解决的. 我用的是VS2010,一个解决方案下,添加了多个他人的项目,各个项目配置都使用了库文件(A.lib),编译,唯独其中一个项目,出现了如下错误提示: 错误         26     error C2040: "LPCH":"int"与"int *"的间接寻址级别不同     c:\program files (x86

一个NFS缓存管理包的bug导致文件系统满的问题和解决方法

这几天安装CentOS 6的虚拟机总是提示文件系统满,一开始以为是最近oracle经常操作大数据量提交导致undo tbs无限扩大,后来发现原来是NFS缓存管理包cachefilesd的问题.分享一下: 由于是测试虚拟机,文件系统懒得专门规划,只划分了一个根目录分区.(各位admin切记不要犯这种实际生产环境的大忌): [[email protected]* /]df -h Filesystem            Size  Used Avail Use% Mounted on /dev/m

让程序只运行一个实例(Delphi篇)(三种方法,其中使用全局原子的方法比较有意思)

Windows 下一个典型的特征就是多任务,我们可以同时打开多个窗口进行操作,也可以同时运行程序的多个实例,比如可以打开许多个资源管理器进行文件的移动复制操作.但有时出于某种考虑(比如安全性),我们要做出一些限制,让程序只能够运行一个实例.在Delphi编程中,笔者总结出了以下几种方法: 一. 查找窗口法 这是最为简单的一种方法.在程序运行前用FindWindow函数查找具有相同窗口类名和标题的窗口,如果找到了,就说明已经存在一个实例.在项目源文件的初始化部分添加以下代码: [delphi] v