QQ登录

只需一步,快速开始

楼主: 胡秀伟
打印 上一主题 下一主题

基于XML的系统配置及改进技术

  [复制链接]

主题

好友

462

积分

专业技术学员

37#
发表于 2012-4-13 23:04:27 |只看该作者
Steven 发表于 2012-4-13 22:59
你是从哪里找到这个资料的?非常有用啊!

来源于互联网,服务于互联网,好东西,大家共享!
回复

使用道具 举报

主题

好友

713

积分

版主

36#
发表于 2012-4-13 22:59:15 |只看该作者
你是从哪里找到这个资料的?非常有用啊!

点评

来源于互联网,服务于互联网,好东西,大家共享!  详情 回复 发表于 2012-4-13 23:04
回复

使用道具 举报

主题

好友

462

积分

专业技术学员

35#
发表于 2012-4-13 22:30:12 |只看该作者
以上资料的doc文档

基于XML的系统配置及改进技术.rar

398.45 KB, 下载次数: 303, 下载积分: 金钱 -2

回复

使用道具 举报

主题

好友

462

积分

专业技术学员

34#
发表于 2012-4-13 22:29:15 |只看该作者
首先利用函数 mxmlLoadFile 装载 XML 配置文档;利用函数 mxmlFindElement 查找到所需节点,将节点的值利用结构体变量赋给程序参数;再利用 mxmlWalkNext 遍历其他的节点,改变当前节点的指针指向,重新读取下一节点的属性值,并将相应的节点值赋给程序参数;对于需要修改节点值的节点,在修改结束后,调用 mxmlRetain 保存节点值;解析全部结束后,关闭XML 配置文档。
回复

使用道具 举报

主题

好友

462

积分

专业技术学员

33#
发表于 2012-4-13 22:28:31 |只看该作者
图....................................

未命名18.JPG (12.72 KB, 下载次数: 785)

未命名18.JPG
回复

使用道具 举报

主题

好友

462

积分

专业技术学员

32#
发表于 2012-4-13 22:28:13 |只看该作者
上表中只是平常使用比较多的函数,此外miniXML还提供了丰富的接口函数供用户调用,更详细的函数功能可以参考其官方网站。
在 FlightGear 下使用 miniXML 解析文档的大致流程如下图所示。
回复

使用道具 举报

主题

好友

462

积分

专业技术学员

31#
发表于 2012-4-13 22:27:33 |只看该作者
miniXML 提供了解析 XML 文档所需要的若干函数,主要函数见下表

未命名17.JPG (16.24 KB, 下载次数: 769)

未命名17.JPG
回复

使用道具 举报

主题

好友

462

积分

专业技术学员

30#
发表于 2012-4-13 22:25:56 |只看该作者
本帖最后由 胡秀伟 于 2012-4-13 22:27 编辑

图......................................

未命名16.JPG (15.33 KB, 下载次数: 671)

未命名16.JPG
回复

使用道具 举报

主题

好友

462

积分

专业技术学员

29#
发表于 2012-4-13 22:25:38 |只看该作者
4 XML 的改进
4.1 存在的不足与完善需求
FlightGear 飞行模拟器软件内部使用了大量的 XML 配置文件作为定义程序运行环境、外界数据(大气云层等),以及各类飞行器的参数定义等。可见基于 XML 的系统配置是 FlightGear软件定义环境的核心,也是保证 FlightGear 开源软件可以支持多平台的重要原因。但是由于FlightGear 飞行模拟器的开源性,导致其 XML 解析程序不够规范,例如在同一程序文件中,定义了几个不同的函数,却实现的是同一功能。XML 程序解析在 FlightGear 整体软件中有大量应用,不同的维护者利用自己封装的 C++函数去实现,显得程序十分庞大,杂乱无章,缺乏规范性。
鉴于FlightGear飞行模拟器在 XML 解析上存在的问题,可以利用全新的 XML 解析程序来替代 FlightGear 中原有的 XML 解析程序。对于全新的 XML 解析程序来说,需要满足以下几点需求:
1) 代码规模小,操作简单,内核轻便,便于多平台的移植;
2) 可以实现基本的 XML 配置文件操作,例如搜索节点、读取属性、保存节点值等;
3) 以标准 C 语言实现,程序书写规范, 体系结构完整。
miniXML 就是满足需求的一个解析 XML 文档的标准 C 语言库,它最初是 Robert为了 Gutenprint 项目而开发的,是一个操作更简单、内核更轻便的解析工具,它具有基本的配置文件操作,并且程序书写规范,体系结构完整,因此选择 miniXML 替代 FlightGear 内原有的解析 XML 模块。
4.2 miniXML 结构及解析流程
利用 VC++ 6.0 编译 miniXML 源码,生成静态链接库 mxml.lib。将 mxml.lib 和 mxml.h 文件拷贝到 FlightGear 的库目录下,在 FlightGear 的链接器属性中添加 mxml.lib,设置其路径,并在程序中需要包含以下头文件:
#include <mxml.h>
即可以在 FlightGear 软件体系中调用 miniXML 下的函数完成 XML 文档的解析。
在 miniXML 中使用 mxml_node_t 结构体对 XML 文档中的节点进行定义。其定义如下:
typedef struct mxml_node_s
{
mxml_type_t type; /* 节点类型 */
struct mxml_node_s *next; /* 同一父节点的下一个节点*/
struct mxml_node_s *prev; /* 同一父节点的上一个节点*/
struct mxml_node_s *parent; /* 父节点 */
struct mxml_node_s *child; /* 第一个子节点*/
struct mxml_node_s *last_child; /* 最后一个子节点 */
mxml_value_t value; /*节点值 */
} mxml_node_t;
Type 成员变量定义不同的节点类型(element, integer, opaque, real, text),可以在不同的节点类型的成员变量获取共用体类型的值(value)。miniXML 节点值的变量成员详见下表
miniXML 节点值的成员变量
回复

使用道具 举报

主题

好友

462

积分

专业技术学员

28#
发表于 2012-4-13 22:24:22 |只看该作者
图.............................

未命名15.JPG (9.31 KB, 下载次数: 695)

未命名15.JPG
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入FG

本版积分规则

手机版|联系我们| FlightGear ( 吉ICP备19002044号-7 )

GMT+8, 2024-6-28 10:30

Powered by Discuz! X3.2

© 2001-2013 FlightGear Inc.

返回顶部