Altova XMLSpy 2023 Enterprise Edition

从XML Schema或DTD生成代码

首页 上一页 向上一级 下一页

使用XMLSpy代码生成器,您可以从XML Schema或DTD中生成C#、C++或Java程序代码。然后可以将生成的Schema包装库集成到您的自定义应用程序中,以便以编程方式读取、修改或编写XML文档。

 

生成程序代码

1.打开要为其生成源代码的Schema。

2.选择DTD/Schema|生成程序代码菜单项。

3.在弹出的对话框的选择模板窗格中,设置代码生成器选项

4.单击确定。将出现浏览文件夹对话框。

5.选择目标文件夹并单击确定

6.系统会提示您在Microsoft Visual Studio中打开新创建的项目。单击。如果生成了Java代码,系统将提示您打开相应的输出目录。

 

当使用XMLSpy从XML Schema或DTD生成代码时,将创建以下库:

 

C++或C#

Java

目的

Altova

com.altova

包含公共运行时支持的基础库,对所有Schema都是相同的。

AltovaXML

com.altova.xml

包含XML的运行时支持的基础库,对所有Schema都是相同的。

[YourSchema]

com.YourSchema

包含从与Schema文件或DTD同名的输入Schema生成的声明的库。此库是一个DOM(W3C文档对象模型)包装器,允许您轻松并安全地读取、修改和创建XML文档。所有数据都保存在DOM中,并且有一些方法可以从DOM中提取数据、并在DOM中更新和创建数据。

 

生成的C++代码支持Microsoft MSXML或Apache Xerces 3。两种DOM实现使用生成的代码的语法几乎相同,只有细微差别(例如,Xerces支持更多的重载函数)。

 

生成的C#代码使用.NET standard System.XML库作为底层DOM实现。

 

生成的Java代码使用JAXP(Java API for XML Processing)作为底层DOM接口。

[YourSchemaTest]

com.YourSchemaTest

生成的代码还包含一个以您的Schema命名的测试应用程序框架(例如,YourSchemaTest)。这是一个可编译的应用程序,它调用一个空的Example()方法。您可以将您的测试代码添加到此方法中,以便轻松快速地测试您新生成的库。

 

在根据频繁更改的XML Schema对应用程序进行原型设计时,您可能需要频繁地将代码生成到同一目录,从而将Schema更改及时反映在代码中。请注意,每次将代码生成到同一个目标目录中时,都会覆盖生成的测试应用程序和Altova库。因此,不能将代码添加到生成的测试应用程序中。取而代之的是,将Altova库集成到您的项目中(参见集成Schema包装库)。

 

名称生成和命名空间

XMLSpy为在XML Schema中重新定义复杂类型的任何已声明元素或复杂类型生成类,,并保留由XML Schema中复杂类型的扩展定义的类派生。对于从多个命名空间导入组件的复杂Schema,XMLSpy通过生成适当的C#或C++命名空间或Java包来保留此信息。

 

通常,代码生成器会尝试保留原始XML Schema中生成的命名空间、类和成员的名称。在目标语言中,标识符中无效的字符将被替换为“_”。与其他名称或保留词冲突的名称可通过追加数字来唯一标识。可以通过在SPL模板中更改默认设置来影响名称生成。

 

使用Schema中的命名空间前缀作为代码命名空间,XML Schema的命名空间转换为Java中的包,或C#或C++代码中的命名空间。整个库括在包中,或从Schema文件名派生的命名空间中,因此您可以在一个程序中使用多个生成的库,而不会出现名称冲突。

 

数据类型

XML Schema的数据类型模型比Java、C#或C++更复杂。代码生成器将内置的XML Schema类型转换为特定于语言的原始类型,或Altova库提供的类。在Schema中定义的复杂类型和派生类型将转换为生成的库中的类。简单类型中的枚举方面将转换为符号常量。

 

简单类型的映射可以在SPL模板中配置,请参见SPL引用

 

如果您的XML实例文件使用与时间和持续时间相关的Schema类型,它们将在生成的代码中转换为Altova本机类。有关Altova库类的信息,请参见:

 

对生成的类(C++)的引用

对生成的类(C#)的引用

对生成的类(Java)的引用

 

有关每种语言的类型转换和其他详细信息,请参见:

 

关于Schema包装库(C++)

关于Schema包装库(C#)

关于Schema包装库(Java)

 

内存管理

DOM树由始终与特定的DOM文档相关联的节点组成,即使该节点当前不是文档内容的一部分。所有生成的类都是对它们所表示的DOM节点(不是值)的引用。这意味着当分配生成类的实例时,不会复制值,它仅创建对相同数据的附加引用。

 

XML Schema支持

以下XML Schema构造函数转换为代码:

 

a) XML命名空间

 

B) 简单类型:

 

内置XML Schema类型

通过扩展派生的简单类型

通过限制派生的简单类型

方面

枚举

模式

 

c)复杂类型:

 

内置anyType节点

用户定义的复杂类型

通过扩展派生:映射到派生类

通过限制派生

复杂内容

简单内容

混合内容

 

在生成的包装类中不支持(或不完全支持)以下XML Schema高级功能:

 

通配符:xs:any and xs:anyAttribute

内容模型(sequence, choice, all)顶级排序符在SPL中可用,但不是由生成的类执行的。

特性的默认值和固定值这些都在SPL中可用,但不由生成的类设置或执行。

特性xsi:type,抽象类型如果需要编写xsi:type特性,请使用生成的类的SetXsiType()方法。

联合类型:并非所有组合都支持。

部分支持替换组(像“choice”一样解析)

特性nillable="true"xsi:nil

唯一性约束

标识约束(keykeyref

© 2017-2023 Altova GmbH