30

我必须编写一个 C++ 应用程序(使用 GUI 的 Qt 框架),它可以编辑存储在由 xsd 模式文件描述的 xml 文件中的数据。是否有将 xsd 模式转换为 C++ 类的工具?

4

8 回答 8

27

在我看来,CodeSynthesis正是您正在寻找的。它是开源和 C++ 的。

于 2009-01-15T08:28:23.303 回答
7

请参阅Google的 XmlPlus-xsd2cpp

XmlPlus xsd2cpp 通过 W3C XML-Schema 提供“简单易用”的 C++ XML 数据绑定。

XmlPlus 的使用受GNU 宽通用公共许可证的保护

于 2013-10-23T13:21:34.197 回答
6

gSOAP Toolkit也可以做到这一点!它是轻量级的,并且支持 C/C++。我已经成功地在要求非常严格的项目中使用了它。此外,它在 GPL2 下获得许可。

可移植性:gSOAP 支持大多数平台,包括嵌入式系统和小型操作系统(例如 WinCE、Symbian 和 PalmOS)。可移植性针对 Windows(98、XP、Vista)、Linux、Unix、Mac OS X、Solaris、HP-UX、AIX、FreeBSD、TRU64、Irix、QNX 和 VxWorks 进行了测试。

于 2013-04-22T06:23:04.620 回答
4

Altova XML Spy可以从 XSD 生成 C++,它是商业的,但如果您想试用,可以免费试用 30 天。

于 2009-01-15T07:40:51.450 回答
4

Objective Systems, Inc. XBinder XML Schema Compiler(不仅适用于 C++)。

于 2011-08-30T14:28:36.627 回答
3

Codalogic LMX也是一种选择。

于 2010-10-25T19:21:06.513 回答
2

我认为有一个 Microsoft 工具可以做到这一点,称为xsd.exe(但我自己没有尝试过)。

于 2009-01-15T13:02:49.787 回答
0

所有的发电机都非常糟糕。

XSD 描述了一个类层次结构,其中类包含子类,子类可能包含其他子类,您要做的就是以相同的方式表示它。

例如,如果这是您的架构:

<xs:element name="shipto">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="address" type="xs:string"/>
      <xs:element name="city" type="xs:string"/>
      <xs:element name="country" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element> 

你想产生类似的东西:

class shipTo
{
  private:
    string name;
    string address;
    string city;
    string country;

  public:
    set_Name();
    get_Name();
    ...
}

你不会找到它。我找到的最接近的东西是 xjc,它是用于 Java 的。

您会期望存在与此功能一样 BASIC 的东西,但我还没有找到它,是的,我使用了 Altova XML-Spy。我很惊讶有人会建议它作为代码生成器。它生成的代码非常糟糕。

我正在为我的项目编写一个 lex/bison 解析器来执行此操作,因为到目前为止我能够找到的所有工具都会产生相当糟糕的代码。Altova 有 30 天的试用期,如果您不相信我,请尝试一下。为我的 XSD 编写 lex/bison 解析器比使用 500 美元的专业代码包生成糟糕的类表示更容易。

我不敢相信人们会在 C++ 中使用 XML,因为它的工具很糟糕。

于 2016-07-12T18:56:18.433 回答