Altova XMLSpy 生成C++工程实例

上一篇,写了Liquid Xml Studio 生成C++代码的过程。

然而,一方面,我时刻没有忘记,在wikipedia上,给程序员用的软件,最贵的就是Altova 的系列产品。

Altova XMLSpy是其产品中一个。


本来不想再调研这个。因为,Liquid Xml Studio已经提供了可以令我满意的效率,而且,我也找到了破解版本的Liquid Xml Studio。


但事实证明,一分钱一分货。看看,我的文件是这样的:

my.xml

<?xml version="1.0" standalone="yes"?>

<NewDataSet>
	<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
		<xs:element name="NewDataSet" msdata:IsDataSet="true">
			<xs:complexType>
				<xs:choice maxOccurs="unbounded">
					<xs:element name="Table" maxOccurs="unbounded">
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Id" type="xs:double" minOccurs="0"/>
								<xs:element name="ParentId" type="xs:double" minOccurs="0"/>
								<xs:element name="MachineName" type="xs:string" minOccurs="0"/>
								<xs:element name="TaskName" type="xs:string" minOccurs="0"/>
								<xs:element name="Descs" type="xs:string" minOccurs="0"/>
								<xs:element name="Percents" type="xs:double" minOccurs="0"/>
								<xs:element name="Status" type="xs:string" minOccurs="0"/>
								<xs:element name="StartTime" type="xs:dateTime" minOccurs="0"/>
								<xs:element name="EndTime" type="xs:dateTime" minOccurs="0"/>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:choice>
			</xs:complexType>
		</xs:element>
	</xs:schema>
	<Table>
		<Id>1</Id>
		<ParentId>0</ParentId>
		<MachineName>Bruce</MachineName>
		<TaskName>Bruce</TaskName>
		<Descs>Cambell</Descs>
		<Percents>100</Percents>
		<Status>Succeed</Status>
		<StartTime>1957-09-06T00:00:00</StartTime>
		<EndTime>2000-07-02T00:00:00</EndTime>
	</Table>
	<Table>
		<Id>2</Id>
		<ParentId>1</ParentId>
		<MachineName>Cindy</MachineName>
		<TaskName>Cindy</TaskName>
		<Descs>Haneline</Descs>
		<Percents>35</Percents>
		<Status>Succeed</Status>
		<StartTime>1973-12-23T00:00:00</StartTime>
		<EndTime>1996-11-06T00:00:00</EndTime>
	</Table>

</NewDataSet>

要注意,这是一个StandAlong文件。

所以,我的方法是,先择XSD从中分离出来:

my.asd

<?xml version="1.0" encoding="utf-8"?>

<!--Created with Liquid XML Studio Developer Edition 9.0.11.3078 (http://www.liquid-technologies.com)-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<xsd:element name="NewDataSet">
		<xsd:complexType>
			<xsd:choice maxOccurs="unbounded">
				<xsd:element name="Table" maxOccurs="unbounded">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="Id" type="xsd:double" minOccurs="0"/>
							<xsd:element name="ParentId" type="xsd:double" minOccurs="0"/>
							<xsd:element name="MachineName" type="xsd:string" minOccurs="0"/>
							<xsd:element name="TaskName" type="xsd:string" minOccurs="0"/>
							<xsd:element name="Descs" type="xsd:string" minOccurs="0"/>
							<xsd:element name="Percents" type="xsd:double" minOccurs="0"/>
							<xsd:element name="Status" type="xsd:string" minOccurs="0"/>
							<xsd:element name="StartTime" type="xsd:dateTime" minOccurs="0"/>
							<xsd:element name="EndTime" type="xsd:dateTime" minOccurs="0"/>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
			</xsd:choice>
		</xsd:complexType>
	</xsd:element>
</xsd:schema>

但是,经过几次测试,我明白了,Liquid Xml Studio生成的代码,无法解析这样的文件。

因为它说找不到

urn:schemas-microsoft-com:xml-msdata
找了一会,没有找到解决的办法。


停了一下,我想到,贵要有贵的道理。要试试Altova XMLSpy


果然没有让我失望。看来奥地利人,要399刀,是有底气的。

好了,开始讲解:

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

对了,先是试用了Altova XMLSpy 2012版本,发现,这个版本,太智能,以致于出现了我不希望他瞎聪明的地方,

再加上,我希望能用vc6 或是 vc2003编译通过,所以,最终我选用的是Altova XMLSpy 2007。很重要啊。

<?xml version="1.0" standalone="yes"?>
在2012里会被改成:

<?xml version="1.0" encoding="utf-8"?>

而2007中无此错误——正合吾意啊。

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

void Example()
{


	CApTaskMonitorDoc doc;
	CNewDataSetType root = doc.Load(_T("E:\\work2\\AutoPack\\08_XML\\XMLFile\\xml\\ApTaskMonitor.xml"));

	CTableType curtable= root.GetTable();
	//int nCurID = curtable.getf
	//   ...

	CTableType TaskItem= root.NewTable();
	TaskItem.AddId(9);
	TaskItem.AddParentId(4);
	TaskItem.AddMachineName(_T("haostep"));
	TaskItem.AddTaskName(_T("测试任务"));

	TaskItem.AddDescs(_T(""));
	TaskItem.AddPercents(0);
	TaskItem.AddStatus(_T("NoStart"));

	TaskItem.AddStartTime(_T("2010-12-30T12:45:37"));
	TaskItem.AddEndTime(_T("2010-12-30T12:45:37"));


	root.AddTable(TaskItem);

	doc.Save(_T("E:\\work2\\AutoPack\\08_XML\\XMLFile\\xml\\ApTaskMonitor1.xml"), root);

}


另外,最喜欢XMLSpy之处,是因为它的代码,没有加密。而liquid太小家子气,把所有的xml解析库,都加了密,没有licesence就无法使用。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值