以XML文件存储配置数据的技术实现,c++
一般新手通常只是使用类似的Xerces,
TinyXML之类的XML解析xml,这种方式实际上很浪费时间,自己编写很多代码也容易出错。因为,他们经常要写一个XML对象Entity的类,并附着一堆对象解析的code。工作量比较大。使用XML
Schema工具,XSD设计工具,然后通过工具生成EntityClass和Paser
class。我不知道这种技术确切的起源时间,但是我知道这种用法用法已经被使用有7、8年了吧。以前写程序,用INI保存配置数据,数据类型还要自己定义,当然也要写一堆的code去解析。
这里推荐的思路是:设计XML
Schema,然后使用工具自动生成代码,编写简单的接口供上层App调用。虽然这种XML保存配置数据的方式保密性不好,但是我们假设有一天XML
schema可以直接转换成某一种数据库schema,将配置数据保存到数据库中并依赖数据加密机制保证数据的安全性。这是后话,暂且放放吧。
设计XML Schema的工具有:MS XML tool, XSD from http://wiki.codesynthesis.com/Using_XSD_with_Microsoft_Visual_Studio
,
还有很多商业工具,如XMLSpy, Oxygen XML Editor.
codesynthesis
XSD 是一个开源的工具,来自Berkeley,
从编译选项看,支持wchar *,
但是通过实践和测试,不能很好得读取包含非ASCII码的文件。如果让应用程序支持_unicode选项的话,会有compiling error.来自 XSD
lib的 print函数。匪夷所思。可能人家不需要读取别国文字吧。
XMLspy 2009 功能很强大,可以设计XML schema, 可以转换DB Schema=> XML Schema,
可以帮你生成一个XML文件,可以根据 XML Schema生成 Java/C++/C# 代码,包括Entity Class,
存取机制甚至测试代码。有一点比较值得称赞就是:在生成代码的前,它让你选择选择XML access library, 如MS XML,or
Xerces。如图:
如果选择 Xerces, 默认情况下,产生的代码是Xerces_2
系列的。如果你使用的是Xerces_3系列的话,对不起有编译错误,因为Interface 在从Xerces2到升级的时候被改写了。
当然,XMLSpy生成的代码也是支持跨平台的,只需要添加一些make
file即可。XMLSpy生成的代码也是支持非ASCII文字的,在编译前填加_MBCS到project
setting中,并将你的XMLfile保存成UTF-8格式。注意我们这里根本就没有提起_unicode或者Unicode.
我这里不说具体原因了。自己体会吧。
Oxygen XML Editor
我这里为什么会提起他呢?主要原因是,我想将一些存储在数据库的表及数据convert到XML中。我使用的是PostgreSQL
相关文档:
引言
C/C++语言有一个不同于其它语言的特性,即其支持可变参数,典型的函数如printf、scanf等可以接受数量不定的参数。如:
printf ( "I love you" );
printf ( "%d", a );
printf ( "%d,%d", a, b );
第一、二、三个printf分别接受1、2、3个参数,让我们看看printf函数的原型:
int printf ( const ......
//判断该xml文档是否存在,不存在则创建
if (!File.Exists(Constants.SYS_CONFIGURE_URL + @"\SaveAccount.xml"))
&nbs ......
函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢?
如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。
定义一个指向函数的指针用如下的形式,以上面的test()为例:
int (*fp)(int a);//这里就定义了一个指 ......