没有 XML 绑定的 XSD 到 Delphi 类
Posted
技术标签:
【中文标题】没有 XML 绑定的 XSD 到 Delphi 类【英文标题】:XSD to Delphi Classes without XML binding 【发布时间】:2011-08-16 18:21:30 【问题描述】:也许以前有人问过这个问题,但我还没有找到关于 Delphi 的问题 - 我在 Visual Studio 中使用了一个 XSD.exe,它就是这样做的:将 XSD 转换为 'plain vanilla' 表示 XSD 中指定的实体的类 - 不绑定到 XML 文档 - 用于在 XSD 中创建结构的类,不访问符合 XSD 中概述的结构的数据。
我正在寻找可以做到这一点的实用程序或产品(不需要大笔费用...):例如,我有这样的架构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="TDelphiClass">
<xs:complexType>
<xs:sequence>
<xs:element ref="ID"/>
<xs:element ref="ConnectionString"/>
<xs:element ref="Group"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ID" type="xs:integer"/>
<xs:element name="ConnectionString" type="xs:string"/>
<xs:element name="Group"type="xs:double"/>
</xs:schema>
我想生成一个如下所示的 Delphi 单元/类:
unit uDelphiClass;
interface
uses
Classes, SysUtils;
type
TDelphiClass = class(TObject)
fID: Integer;
fConnectionString: string;
fGroup: Double;
end;
implementation
end.
【问题讨论】:
欢迎来到 SO。编辑帖子时,请不要删除代码格式。阅读有关代码格式的常见问题解答(在编辑期间可见):它可以帮助每个人清楚地了解您的意思。 【参考方案1】:字里行间(请少用缩写,例如VS has multiple meanings,即使在计算中也是如此),并且您可能使用Visual Studio 中的XSD.EXE 工具或.NET SDK 在C# 中生成源代码或 VB.NET 语言。
如果你有Delphi Prism,你可以use XSD.EXE to generate Delphi Prism source code。
Delphi Prism 语言与 Delphi 本地语言非常接近,因此您可以快速入门。
这也适用于 Delphi Prism 试用版。
顺便说一句:你为什么不想以独立的方式使用XML Data Binding Wizard 生成的Delphi 本机代码?它是基于界面的,但速度非常快并且效果很好。
【讨论】:
对格式化等感到抱歉-我通常直到深夜才开始这样做...是的,它是带有几个参数的 XSD.exe 以获得该结果。至于 delphi 数据绑定向导,如果它是像我的示例这样的模式,那将不是问题 - 但对于大型复杂模式,需要大量工作来重新调整 - 特别是因为数据绑定向导假设你'使用 xml 文档重新持久化数据,当您想要“普通的”delphi 类时,您需要为此设置字段和属性获取器/设置器。将调查 Prism 工具。 Tnx-MNG @Mikey:请注意,大型复杂模式通常无法自动映射到“普通”编程语言。 我在 MS 工具上取得了巨大的成功,即使在具有嵌套类、枚举、众多限制等的相当复杂的模式上也是如此。诀窍是知道如何编写 RIGHT XSD(不,不是那么容易......)以便生成器执行您想要的操作。 @Mikey:确实!太糟糕了,我通常会使用外部 XSD :) 让我们希望 JSON 继续 G_R_O_W... 更好!【参考方案2】:http://sourceforge.net/projects/xxsd2code/ 生成 C++、C#、C++/CLI 和 Java - 看起来包含的“LanguageWriter”类对于为 Delphi 扩展它们并不太复杂。例如,Java LanguageWriter 的行数少于 400 行。如果 Delphi 社区有兴趣,这可以在短时间内实施和贡献...
【讨论】:
我会检查的。但我想知道为什么从来没有人对此感兴趣。我主要编写中间件和服务器端代码,这些代码通常必须与 Java 和 C# 客户端交互——确保每个人都能与您交谈的最佳方式是从一开始就使用 XSD 定义您的类。以上是关于没有 XML 绑定的 XSD 到 Delphi 类的主要内容,如果未能解决你的问题,请参考以下文章