`
javasogo
  • 浏览: 1779099 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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.csdn.net/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;EN-U

分享到:
评论

相关推荐

    易语言模块 XMLDOM 解析 构造 获取 更改 添加 删除 遍历元素 格式化XML

    1、XMLDOMDocument类: XML对象文档 -&gt;操作创建或读写(元素、节点、属性、注释)等 2、IXMLDOMNode类:每个元素或节点基本都会有的方法;作为元素和节点的基类调用 3、IXMLDOMAttribute类:就是元素或节点的属性类 4...

    TinyXML是一个开源的解析XML的解析库

    TiXmlBase:整个TinyXML模型的基类。 TiXmlAttribute:对应于XML中的元素的属性。 TiXmlNode:对应于DOM结构中的节点。 TiXmlComment:对应于XML中的注释。 TiXmlDeclaration:对应于XML中的申明部分,即;。 ...

    JAVA_API1.6文档(中文)

    javax.sql.rowset JDBC RowSet 实现的标准接口和基类。 javax.sql.rowset.serial 提供实用工具类,允许 SQL 类型与 Java 编程语言数据类型之间的可序列化映射关系。 javax.sql.rowset.spi 第三方供应商在其同步...

    C# 程序设计手册(WORD)

    宣告和使用读取/写入属性 173 自动实作的属性 176 使用自动实作的属性来实作轻量型类别 176 方法 177 传递参数 181 传递实值型别的参数 181 传递参考型别的参数 184 了解传递结构和传递类别参考给方法之间的差异 187...

    spring.net中文手册在线版

    4.3.3.详细讨论对象属性和构造器参数 4.3.3.1.设置空值 4.3.3.2.设置集合值 4.3.3.3.设置泛型集合的值 4.3.3.4.设置索引器属性 4.3.3.5.内联对象定义 4.3.3.6.idref节点 4.3.3.7.引用协作对象 4.3.3.8.value和ref...

    Java数据库编程宝典2

    目录 前言 第1部分 介绍数据库、... 第17章 XML文档对象模型和JDBC 17.1 XML与HTML 17.2 XML和文档对象模型 17.2.1 XML标题 17.2.2 标记和属性 17.2.3 元素和节点 17.3 使用Java XML API——Xerces和JDOM ...

    C#本质论(第3版)

    5.6.8 属性和方法调用不允许作为ref或out参数值使用 5.7 构造器 5.7.1 构造器的声明 5.7.2 默认构造器 5.7.3 对象初始化器 5.7.4 构造器的重载 5.7.5 使用this调用另一个构造器 5.8 静态成员 5.8.1 静态...

    Java数据库编程宝典4

    目录 前言 第1部分 介绍数据库、... 第17章 XML文档对象模型和JDBC 17.1 XML与HTML 17.2 XML和文档对象模型 17.2.1 XML标题 17.2.2 标记和属性 17.2.3 元素和节点 17.3 使用Java XML API——Xerces和JDOM ...

    Java数据库编程宝典1

    目录 前言 第1部分 介绍数据库、... 第17章 XML文档对象模型和JDBC 17.1 XML与HTML 17.2 XML和文档对象模型 17.2.1 XML标题 17.2.2 标记和属性 17.2.3 元素和节点 17.3 使用Java XML API——Xerces和JDOM ...

    Java数据库编程宝典3

    目录 前言 第1部分 介绍数据库、... 第17章 XML文档对象模型和JDBC 17.1 XML与HTML 17.2 XML和文档对象模型 17.2.1 XML标题 17.2.2 标记和属性 17.2.3 元素和节点 17.3 使用Java XML API——Xerces和JDOM ...

    CLR.via.C#.(中文第3版)(自制详细书签)Part1

    22.6.3 Microsoft ASP.NET Web窗体和XML Web服务应用程序 22.6.4 Microsoft SQL Server 22.6.5 更多的用法只局限于你自己的想象力 22.7 高级宿主控制 22.7.1 使用托管代码管理CLR 22.7.2 编写健壮的宿主应用...

Global site tag (gtag.js) - Google Analytics