XML和对象属性互转的基类

本人做了一个XML和对象属性互转的基类,现在放上来有兴趣拿去看一下,用法很简单,声明一个BaseConversion的子类,该子类与你想转换的对象相对应,然后覆盖基类的两个虚方法,然后在里面写元素与对象属性的转换即可以,废话少说了,还是看代码了,例子也懒得去写了,相信不会很难看懂的:

unitXMLConversion;

{*******************************************
*brief:XML和对象属性的转换
*autor:linzhenqun
*date:<chsdate w:st="on" isrocdate="False" islunardate="False" day="26" month="10" year="2005">2005-10-26</chsdate>
*email:linzhengqun@163.com
*blog:http://blog.youkuaiyun.com/linzhengqun
********************************************}

interface
uses
Classes,SysUtils,xmldom,XMLIntf,oxmldom,XMLDoc;

Type

TBaseConversion=class
protected
FXMLDoc:TXMLDocument;

(*ParenElem元素下增加一个子元素*)
functionAppendChildElement(constTagName,Value:WideString;
ParenElem:IDOMElement):IDOMElement;

(*根据TagName取得XML节点下的某一个子节点*)
functionGetSingleEleByTagName(AEle:IDOMElement;TagName:WideString):IDOMElement;

(*取得XML节点的文本*)
functionGetElementText(AElement:IDOMNode):WideString;

(*IDOMElementtext值转换成各种类型的数据,
如果AElem=nil或者text不符合某些数据类型,返回Default*)
functionEleTextToBoolDef(AElem:IDOMElement;constDefault:Boolean):Boolean;
functionEleTextToStrDef(AElem:IDOMElement;constDefault:WideString):WideString;
functionEleTextToIntDef(AElem:IDOMElement;constDefault:Integer):Integer;
functionEleTextToFloatDef(AElem:IDOMElement;constDefault:Extended):Extended;

(*取得IDomElement的属性的值,并转换成各种类型
如果不符合数据类型,返回Default*)
functionEleAttrToBoolDef(AElem:IDOMElement;AttrName:WideString;
constDefault:Boolean):Boolean;
functionEleAttrToStrDef(AElem:IDOMElement;AttrName:WideString;
constDefault:WideString):WideString;
functionEleAttrToIntDef(AElem:IDOMElement;AttrName:WideString;
constDefault:Integer):Integer;
functionEleAttrToFloatDef(AElem:IDOMElement;AttrName:WideString;
constDefault:Extended):Extended;

procedureObjPropertyToElements(Obj:TObject);virtual;
procedureElementsToObjProperty(Obj:TObject);virtual;
public
procedureXMLToObjProperty(XMLStream:TStream;Obj:TObject);
procedureObjPropertyToXML(XMLStream:TStream;Obj:TObject);
constructorCreate;
destructorDestroy;override;
end;

implementation

{TBaseConversion}

functionTBaseConversion.AppendChildElement(constTagName,
Value:WideString;ParenElem:IDOMElement):IDOMElement;
var
Text:IDOMText;
begin
Result:=FXMLDoc.DOMDocument.createElement(TagName);
ifValue<>''then
begin
Text:=FXMLDoc.DOMDocument.createTextNode(Value);
Result.appendChild(Text);
end;
ParenElem.appendChild(Result);
end;

constructorTBaseConversion.Create;
var
Vendor:TDOMVendor;
begin
FXMLDoc:=TXMLDocument.Create(nil);

//下面这几句代码可以去掉,则将使用MSXML来解析
//现在是用OpenXML的原生代码解析
Vendor:=DOMVendors.Find('OpenXML');
ifVendor<>nilthen
FXMLDoc.DOMVendor:=Vendor;
end;

destructorTBaseConversion.Destroy;
begin
FXMLDoc.Free;
inherited;
end;

functionTBaseConversion.EleAttrToBoolDef(AElem:IDOMElement;AttrName:WideString;
constDefault:Boolean):Boolean;
var
LNode:IDOMNode;
begin
Result:=Default;
ifAElem<>nilthen
begin
LNode:=AElem.attributes.getNamedItem(AttrName);
ifLNode<>nilthen
Result:=StrToBoolDef(LNode.nodeValue,Default);
end
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值