Delta与XML相互转换
大家都知道TClientDataSet的Delta属性保存数据集的变化,但是Delta是OleVariant类型的属性,这样如果用Delphi写Webservice,就有需要把它转成XML,特别是其他语言也要用这个Webservice的时候,因为如果Delta能和XML相互转换,Delta包的结构就是透明的了。而TClientDataSet却没有提供DeltaXML这样的属性,之前在网上找了一下,发现网上的都是把Delta赋给另一个TClientDataSet的Data,然后再通过XMLData返回XML,但这样为了一个简单的功能就得多创建一个对象实例,感觉很不好,于是研究一下TClientDataSet的源码,终于完成了Delta与XML相互转换的函数,代码如下:
unit uDelta;
interface
uses DBClient,DSIntf,VarUtils,ActiveX;
function DeltaToXML(Delta:OleVariant):String;
function XMLToDelta(XMLData:String):OleVariant;
implementation
procedure Check(FDSBase:IDSBase;Status: DBResult);
var
ErrMsg: array[0..2048] of Char;
begin
if Status <> 0 then
begin
FDSBase.GetErrorString(Status, ErrMsg);
raise EDBClient.Create(ErrMsg, Status);
end;
end;
function DeltaToXML(Delta:OleVariant):String;
var
FDSBase: IDSBase;
DataPacket: TDataPacket;
VarPacket: OleVariant;
begin
CreateDbClientObject(CLSID_DSBase, IDSBase, FDSBase);
SafeArrayCheck(ActiveX.SafeArrayCopy(VarToDataPacket(Delta), DataPacket));
Check(FDSBase,FDSBase.AppendData(DataPacket, True));
FDSBase.SetProp(dspropXML_STREAMMODE, xmlON);
Check(FDSBase,FDSBase.StreamDS(DataPacket));
DataPacketToVariant(DataPacket, VarPacket);
Result := VariantArrayToString(VarPacket);
//FreeDataPacket(DataPacket);
end;
function XMLToDelta(XMLData:String):OleVariant;
var Delta:OleVariant;
DataPacket: TDataPacket;
FDSBase: IDSBase;
begin
Delta:=StringToVariantArray(XMLData);
SafeArrayCheck(SafeArrayCopy(VarToDataPacket(Delta), DataPacket));
CreateDbClientObject(CLSID_DSBase, IDSBase, FDSBase);
Check(FDSBase,FDSBase.AppendData(DataPacket, True));
FDSBase.SetProp(dspropXML_STREAMMODE, xmlOFF);
Check(FDSBase,FDSBase.StreamDS(DataPacket));
DataPacketToVariant(DataPacket, Result);
//FreeDataPacket(DataPacket);
end;
end.
Delta与XML相互转换相关推荐
- C#实现实体类和XML相互转换
一.实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化 public static string XmlSerialize<T& ...
- php 数组转xml 函数,PHP数组和XML相互转换的函数
这篇文章主要介绍了关于PHP数组和XML相互转换的函数 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下//数组转xml function ArrToXml($arr) { if(!is ...
- 一文帮你完美解决Json和Xml相互转换
目录 1.导入用到的jar包 2.xml格式转换为json格式 3.json格式转换为xml格式 我们经常会碰到Json和Xml相互转换,但是转换过程中经常出现各种奇葩问题,比如多节点了或少节点了,或 ...
- java实体 和 xml相互转换
参考: https://blog.csdn.net/LookForDream_/article/details/88884316 https://zhuchengzzcc.iteye.com/blog ...
- 使用xfire webservice接口开发,obj与xml相互转换好用工具类,不需要写大量的转换代码,亲测可用
webservice接口开发,旧工程中存在使用xfire开发的接口,对象转换为xml和xml转换为对象的时候需要些大量的代码,工作量很大.现在提供一个比较好的对象转换为xml的工具. <!-- ...
- 在 JavaScript 中将 String 与 XML 相互转换
将字符串换成 XML 对象 function convert_string_to_xml(strXML) { if (window.ActiveXObject) { xmlDoc=new Active ...
- Java对象与XML、Excel、TXT文件相互转换
一.目的 文件的存储与导出java对象,文件格式包括xml.txt.xlxs三种文件格式 二.准备 Student 类 /*** 学生的信息(学号.姓名.电话.邮箱信息)** @ClassName S ...
- 了解女友的心还不如了解Python之在Python中解析和修改XML
2021年12月15日 10:14 · 阅读 30 摘要: 工作中我们时常需要解析用不同语言编写的数据.Python 提供了许多库来解析或拆分用其他语言编写的数据.在这篇 Python XML 解析 ...
- java 判断对象是否是xml格式_java对象与xml格式之间的转换
java对象是可以直接与xml相互转换的,但需要导入包:xstream-1.3.1.jar,在创建对象的时候,注意一定要new一个DomDriver: 成功的测试代码如下: package com.x ...
最新文章
- 我们为什么选择Kubernetes
- python转移环境_python 虚拟环境及项目快速迁移
- django中序列化器字段参数、关联字段
- OpenGL阴影贴图
- mysql从oracle取数_Oracle通过过程定期取数
- 通过hibernate去调用存储过程
- Git-分布式版本控制系统
- Centos 云服务器磁盘占用率90%以上的排查解决
- 那些年让我们头疼的CSS3动画
- AD的命名规则 AD常用产品型号命名规则
- 2019.6.18 区块链论文翻译
- 清华大学计算机考研资料汇总
- VBA实例6 CorelDraw 批量生成设备位号、连续编号
- 计算机等级考试 设置表格居中,Word表格水平居中怎么设置
- unicloud云开发---uniapp云开发(二)---云存储基础
- 'utf-8' codec can't decode byte 0xb5 in position : invalid start byte
- Android动态更改TextView的字体大小
- javascript案例16——判断输入的年份是否是闰年、判断闰年
- 标量、向量、矩阵求导大全
- memcache set操作详解