我必须编写一个 C++ 应用程序(使用 GUI 的 Qt 框架),它可以编辑存储在由 xsd 模式文件描述的 xml 文件中的数据。是否有将 xsd 模式转换为 C++ 类的工具?
8 回答
在我看来,CodeSynthesis正是您正在寻找的。它是开源和 C++ 的。
请参阅Google的 XmlPlus-xsd2cpp:
XmlPlus xsd2cpp 通过 W3C XML-Schema 提供“简单易用”的 C++ XML 数据绑定。
XmlPlus 的使用受GNU 宽通用公共许可证的保护
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 进行了测试。
Altova XML Spy可以从 XSD 生成 C++,它是商业的,但如果您想试用,可以免费试用 30 天。
Objective Systems, Inc. XBinder XML Schema Compiler(不仅适用于 C++)。
Codalogic LMX也是一种选择。
我认为有一个 Microsoft 工具可以做到这一点,称为xsd.exe(但我自己没有尝试过)。
所有的发电机都非常糟糕。
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,因为它的工具很糟糕。