无需使用XML绑定将XSD转换为Delphi类

13
也许之前有人问过这个问题,但是我在Delphi方面没有找到相关的解答。我在Visual Studio中使用了一个名为XSD.exe的工具,它可以将XSD转换为表示在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。在编辑您的帖子时,请不要删除代码格式。阅读有关代码格式的FAQ(在编辑期间可见):它有助于每个人清晰地了解您的意思。 - Jeroen Wiert Pluimers
2个回答

6
阅读行间的信息(请使用较少缩写,例如,VS有多个含义,甚至在计算机中),您可能使用了Visual Studio或.NET SDK中的XSD.EXE工具来生成C#或VB.NET语言的源代码。
如果您有Delphi Prism,您可以使用XSD.EXE生成Delphi Prism源代码
Delphi Prism语言非常接近Delphi本地语言,这将为您提供一个起点。
这也适用于Delphi Prism试用版。

顺便问一下:为什么你不想单独使用通过XML Data Binding Wizard生成的Delphi本地代码呢?它是基于接口的,但非常快速且运行非常良好。


抱歉关于格式等问题 - 我通常很晚才上SO...是的,它是XSD.exe加上一些参数得到的结果。至于Delphi数据绑定向导,如果它是像我的示例那样的模式,那就不是问题了 - 但对于一个大而复杂的模式,需要花费大量的工作来重新调整事物 - 特别是因为数据绑定向导假设您正在使用XML文档持久化数据,而当您需要“普通香草”Delphi类时,您需要设置字段和属性getter/setter。将调查Prism工具。谢谢-MNG - Vector
@Mikey:请注意,大型复杂模式通常无法以自动化方式映射到“普通”编程语言中。 - Jeroen Wiert Pluimers
我使用 MS 工具取得了巨大的成功,即使是在具有嵌套类、枚举、多个限制等复杂模式的情况下也能如此。窍门在于要知道如何编写正确的 XSD(不是所有人都很容易做到这一点),以便生成器按照您想要的方式运行。 - Vector
@Mikey:确实!太糟糕了,我通常需要使用外部XSD :) - Jeroen Wiert Pluimers
让我们希望 JSON 继续 G_R_O_W... 这样会更好! - Vector

4

我会去看一下。但是我想知道为什么这方面从来没有引起太多的兴趣。我主要编写中间件和服务器端代码,通常需要与Java和C#客户端进行接口交互 - 确保每个人都能与您交流的最佳方法是从一开始就使用XSD定义您的类。 - Vector

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接