2024年4月8日发(作者:)

使用Tuxedo将C语言中的结构体转换成Xml

格式的字符串

----使用Tuxedo10gR3的API进行的开发,我的邮箱是

changpeng999@ 欢迎指正文中的错误,谢谢,转载请注明

1. 概述

1.1 XML语言

在百度百科中XML(Extensible markup language)可扩展标记语言的定义是:用于标记

电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户

对自己的标记语言进行定义的源语言。

举一个XML字符串的实例:

9999

20130301

001225

999

credit

888888888

zhangsan

XML具有自描述性,其标签没有被预定义,这样使得其可以存储的信息的扩展性很强,

我觉得在信息交换方面很有用;其次XML的结构是可以嵌套的,由各个形成树状。

1.2 C结构体

C语言中的结构体同样能够完成XML所实现的功能,但是其是一种语言中的数据类型,

必须通过C语言的函数和语法来进行操作。在项目中有时我们会从外部接收到XML格式的

数据或者向外发送XML格式的数据,需求要求我们将C结构体所存储的数据以XML格式的

形式体现出来,Tuxedo中的FML(Field Manipulation Language域操作语言)就能够完成这个任

务。

2. Tuxedo将C结构体转换成XML格式的字符串

2.1 Tuxedo的FML概念

域操作语言(Field Manipulation Languages或者FML),是一个用来定义和操作被称为域缓

冲存储结构的C语言函数集合,域缓冲的域(filed)中包含了属性—值(attribute-value)对。属性

是域的标识符,其对应的值包含了域的数据内容。

通过对相关域的集合提供一个有名访问(named access),域缓冲为不同进程间的参数

化的数据通信提供了一个非常好的结构。需要同其他进程通信的程序可以使用FML软件来

提供对域的访问而不需要考虑包含这些域的结构。

FML也提供了一个叫做VIEWS的工具,其允许你将域缓冲映射到C语言的结构体或者

COBOL中的records,反之亦然。VIEWS工具使你执行冗长的数据操作在结构体中进行而不

是在域缓冲中进行;如果数据被传输至结构体中来进行操作,应用程序能够运行的更快。因

此,VIEWS工具将域缓冲中的数据独立性和经典的结构体(record structures)的效率和简洁联

系在了一起。

下面是域表文件empdataflds文件内容的截图,

该文件定义了三个域,它们的域名称分别是EMPNAME,EMPID和EMPJOB,对应的数据

类型分别是string,long和string。

命令mkfldhdr32会根据域表文件empdataflds生成域头文件empdataflds.h

下图是source viewfile empdata.v的所有内容