XML常用的工具_LiquidXMLStudio映射XML到C++代码

人类社会,据马克思所说,三要素:

生产力,生产关系和财富再分配。

虽然说,总体来说,我个人认为,财富再分配,是核心是重,但对于吊丝来说,还是关注一下生产力吧。至于爸爸是李刚刚的,考虑一下基它的吧。

生产力的核心,就是工具。

所以,做为一个程序员,掌握工具,是很重要的。以前我招人,也是理论和工具并重。一个不注重工具的人,往往是一个不注重实践的人。赵括理论还不错,但打起仗来,就不成。其中一个原因,就是实践不够,或是不重视实践。

这里我总结一下我自己的心理。如果你不幸进来看到我写的文字,先忍一下我的罗索吧。

XML的工具,最近我用了用,几个XMLSpy和LiquidXMLStudio是主要用的两种。

********************

Let‘s Start:

先看一个网页:

http://en.wikipedia.org/wiki/Comparison_of_XML_editors

这也是我的习惯。

不过这里面的列,不是很全。

我是希望有几个方面:

* 能生成C++代码,这个功能在这里被称做:map。map的意思是说从xsd映射到代码。当然,也有其它的含义,但一般不会用map,比如xml to xml, xml to DB. 都会写清楚,但只有map,现在看来就是这个意思。之所以,要生成C或C++代码,是因为我底层的解析器就是用C写的。不想在这个层面来转换。

因为XML本身,才是接口信息的承载。没必要,再加入一种新语言。

* 如果生成的代码,是基于开源的XML库就更好的。

目前来看,经过调研,目前最好的XML开源库,就是libxml2和xerces. 不过,总体来说,如果我自己来做,会选libxml2.

因为这个库是基于C的,也便于跨平台。

* 其它的XML自动化编辑工具。这些就不用说了。

但事实上,没有找到达到这种要求的编辑器。

除XMLSpy 和 LiquidXMLStudio 以外,发现还有两个比较强大,其实,哪个强大,你只需要在这里看看哪个最贵就可以了。

http://en.wikipedia.org/wiki/Comparison_of_XML_editors

不过,我是没看懂,为什么有的那么贵。看来,程序员,总是站在程序员的角度来看世界,里面最贵的MadCap Flare,比LiquidXMLStudio贵了一个量级。

好象MadCap FlareXMLSeedXML Schema Editor

类似,都是用于非程序员的。他们贵的原因,都是因为真真正正在用XML的含义:完备性的文档(不是程序员的叫法:可扩展性ML)。是给不是程序员的人用的,看来也说明,程序员普遍都是吊丝。外国可能也是如此。

哈。吊丝们都回回神,不多说了,所以关注点来是回到XMLSpy 和 LiquidXMLStudio。(为什么我用吊丝?因为QQ拼音,因为高大上的原因,打不出来这个词)。

让我吃惊的是,XMLSpy好贵。快赶上非程序员用的。

但,我这没有最新版的2014,据说也是可以完成XML到C++的MAP.

所以,只用到了LiquidXMLStudio。

LiquidXMLStudio 可以映射各种语言,只是我用到了C++。

至于如何操作,我不写了,看这个页面:

http://www.liquid-technologies.com/Liquid-Products/LearnAbout/XmlDataBinding.aspx

没有被墙。

忘了说,这是我最关注的一个要点

* 没有被墙。

下一个,当然是,有D版的。

然后,最好有vs 2003以下版本的。能在XP运行的。

以上就是我的要求。

***********************************************************************

经过调研,没有达到要求的,暂时。

但xmlstudio2011 最合适,因为有破解,可以生成C++代码。

用的虽然不是开源的XML库,但也够用了。

***********************************************************************

以下是示例代码,最关键是这几句

		BookStoreLib::CBookstorePtr spBS = BookStoreLib::CBookstore::CreateInstance();
		BookStoreLib::CBookTypePtr spBook = spBS->GetBook()->Add();
		spBook->SetTitle(_T("The Autobiography of Benjamin Franklin"));
		spBook->SetPrice(8.99);
		spBook->SetPublicationdate(LtXmlLib12::CDateTime(1981, 5, 11));
		spBook->SetISBN(_T("1-861003-11-0"));
		spBook->GetAuthor()->SetFirst_name(_T("Benjamin"));
		spBook->GetAuthor()->SetLast_name(_T("Franklin"));
		spBook->SetGenre(_T("autobiography"));
		std::tstring strXml = spBook->ToXml();

1. 打开一个XSD,然后:打开向导:

2. 选择C++语言

3. 可以修改一些信息,可选

4. 填加一个测试用的XML文件。

5. OK 了,打开工程后

6. 打开工程,进行一点编码。Liquid会自动创建一个chm帮助文档,这个我太喜欢了。

照着下面这样,你就可以生成一个可以工作的例子了。

对了,我所选的xml是在示例工程下面。

D:\Program Files (x86)\Liquid Technologies\Liquid XML 2014\Examples\BookStore\Schemas\BookStore.xsd

D:\Program Files (x86)\Liquid Technologies\Liquid XML 2014\Examples\BookStore\Data Files\BookStoreSample.xml

**********************************************

		// create an instance of the class to load the XML file into
		bs::CBookstorePtr elm = bs::CBookstore::CreateInstance();

		// load the xml from a file into the object (the root element in the
		// xml document must be <bookstore>.
		elm->FromXmlFile(lpctFilename);

//--------<haoyujie>--------------
		bs::CBookTypePtr spBook = elm->GetBookCol()->Add();
		spBook->SetTitle(_T("The Autobiography of Benjamin Franklin"));
		spBook->SetPrice(8.99);
		spBook->SetPublicationdate(LtXmlLib12::CDateTime(1981, 5, 11));
		spBook->SetISBN(_T("1-861003-11-0"));
		spBook->GetAuthor()->SetFirst_name(_T("Benjamin"));
		spBook->GetAuthor()->SetLast_name(_T("Franklin"));
		spBook->SetGenre(_T("autobiography"));
//--------</haoyujie>--------------

*********************************************

#include "stdafx.h"
#include "../BookStoreLib.h"
#include "../BookStoreLib/Bookstore.h" 

using namespace LtXmlLib12;

// forward declarations
void SimpleTestBookStoreLibCBookstore(LPCTSTR);
void WriteTest();
void ReadTest();

/// <summary>
/// The main entry point for the application.
/// </summary>
int main(int argc, char* argv[])
{
	WriteTest();
	ReadTest();

	_tprintf(_T("\n\nPress a key to finish"));
	getchar();

	return 0;
}

void WriteTest()
{
	try
	{
		_tprintf(_T("\nCreating an XML document...\n"));

		// to create the XML document from scratch
		BookStoreLib::CBookstorePtr spBS = BookStoreLib::CBookstore::CreateInstance();
		BookStoreLib::CBookTypePtr spBook = spBS->GetBook()->Add();
		spBook->SetTitle(_T("The Autobiography of Benjamin Franklin"));
		spBook->SetPrice(8.99);
		spBook->SetPublicationdate(LtXmlLib12::CDateTime(1981, 5, 11));
		spBook->SetISBN(_T("1-861003-11-0"));
		spBook->GetAuthor()->SetFirst_name(_T("Benjamin"));
		spBook->GetAuthor()->SetLast_name(_T("Franklin"));
		spBook->SetGenre(_T("autobiography"));
		std::tstring strXml = spBook->ToXml();

		_tprintf(_T("\nThis is the XML:\n%s"), strXml.c_str());
	}
	catch (CLtException& e)
	{
		// Note : exceptions are likely to contain inner exceptions
		// that provide further detail about the error, GetFullMessage
		// concatantes the messages from them all.
		_tprintf(_T("Error - %s\n"), e.GetFullMessage().c_str());
	}
}

void ReadTest()
{
	try
	{
		_tprintf(_T("\nReading an existing XML document...\n"));

		// to create the XML document from scratch
		BookStoreLib::CBookstorePtr spBS = BookStoreLib::CBookstore::CreateInstance();
		spBS->FromXmlFile(_T("..\\..\\..\\BookStoreSample.xml"));

		for (BookStoreLib::CBookTypeCol::iterator itr = spBS->GetBook()->begin();
			 itr != spBS->GetBook()->end();
			 itr++)
		{
			BookStoreLib::CBookTypePtr spBook = *itr;

			_tprintf(_T("Book Title           %s\n"), spBook->GetTitle().c_str());
			_tprintf(_T("    Price            %f\n"), spBook->GetPrice());
			_tprintf(_T("    Author           %s %s\n"), spBook->GetAuthor()->GetFirst_name().c_str(), spBook->GetAuthor()->GetLast_name().c_str());
			if (spBook->IsValidPublicationdate())
				_tprintf(_T("    Publicationdate  %s\n"), spBook->GetPublicationdate().ToString().c_str());
			else
				_tprintf(_T("    Publicationdate  Not Listed\n"));
			if (spBook->IsValidISBN())
				_tprintf(_T("    ISBN             %s\n"), spBook->GetISBN().c_str());
			else
				_tprintf(_T("    ISBN             Not Listed\n"));
			if (spBook->IsValidGenre())
				_tprintf(_T("    Genre            %s\n"), spBook->GetGenre().c_str());
			else
				_tprintf(_T("    Genre            Not Listed\n"));
		}
	}
	catch (CLtException& e)
	{
		// Note : exceptions are likely to contain inner exceptions
		// that provide further detail about the error, GetFullMessage
		// concatantes the messages from them all.
		_tprintf(_T("Error - %s\n"), e.GetFullMessage().c_str());
	}
}

XML常用的工具_LiquidXMLStudio映射XML到C++代码

时间: 2024-10-28 08:16:33

XML常用的工具_LiquidXMLStudio映射XML到C++代码的相关文章

Struts2 验证框架 validation.xml 常用的验证规则

Struts2 验证框架 validation.xml 常用的验证规则 validation.xml 的命名规则和放置路径:文件名:<ActionClassName>-validation.xml<ActionClassName>就是要验证的Action类的名字. 要将此文件放于Class文件相同的目录.如果在Action类在struts配置中有多个action实例(action name),那么对应某个action的验证文件名规则如下:文件名:<ActionClassNam

C#中常用的几种读取XML文件的方法

XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具.XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用.微软也提供了一系列类库来倒帮助我们在应用程序中存储XML文件. “在程序中访问

MyBatis 入门到精通(二) SQL语句映射XML文件

MyBatis 真正强大之处就在这些映射语句,也就是它的魔力所在.对于它的强大功能,SQL 映射文件的配置却非常简单. 如果您比较SQL 映射文件配置与JDBC 代码,您很快可以发现,使用SQL 映射文件配置可以节省95%的代码量.MyBatis 被创建来专注于SQL,但又给您自己的实现极大的空间. 需要配置的基本元素 1. cache – 配置给定模式的缓存 2. cache-ref – 从别的模式中引用一个缓存 3. resultMap – 这是最复杂而却强大的一个元素了,它描述如何从结果集

logback logback.xml 常用配置详解

一:根节点 包含的属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒.当scan为true时,此属性生效.默认的时间间隔为1分钟. debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态.默认值为false. 例如: <configuration scan="true" scan

MyBatis Spring整合配置映射接口类与映射xml文件

Spring整合MyBatis使用到了mybatis-spring,在配置mybatis映射文件的时候,一般会使用MapperScannerConfigurer,MapperScannerConfigurer会自动扫描basePackage指定的包,找到映射接口类和映射XML文件,并进行注入.配置如下: [html] view plain copy <!-- 数据源 --> <bean id="dataSource" class="com.mchange.v

Java操作XML的JAXB工具

在java中操作XML的工作中中,比较方便的工具是JAXB(Java Architecture for XML Binding). 利用这个工具很方便生成XML的tag和Java类的对应关系.参照网上的资料,简单说明一下java操作xml的一些东西. 1.先定义一个XML Schema文件.比如: [html] view plain copy print? <?xml version="1.0" encoding="UTF-8" standalone=&quo

logback logback.xml常用配置详解(三) &lt;filter&gt;

转自:logback logback.xml常用配置详解(三) <filter> logback 常用配置详解(三) <filter> <filter>: 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一.返回DENY,日志将立即被抛弃不再经过其他过滤器:返回NEUTRAL,有序列表里的下个过滤器过接着处理日志:返回ACCEPT,日志会被立即处理,不再经过剩余过滤器. 过滤器被添加到<Appender> 中,为<

XML常用操作

C#操作XML非常简单 一是写入: 生明一个xelment 再在它的父节点Add就可以,也可以用生明的节点.SetAttribute("节点名称","节点对应的值"); 二是读取: 一样也是先生明再得到其子节点再                    if (xe.Name == "Contrast")                                            if (xe.GetAttribute("IsS

利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD

利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD 1, 命令提示符-->找到vs自带的xsd.exe工具所在的文件夹 例如: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 注意:win7操作系统“命令提示符”要以管理员身份运行 2,将Xml文件拷贝到xsd.exe工具所在的文件夹,生成的xsd文件也将在这个文件夹中 3,在命令提示符中输入 xsd.exe test.xml, 多个xml文件以空格隔