【发布时间】:2010-10-01 13:08:43
【问题描述】:
我必须编写一个 C++ 应用程序(使用 GUI 的 Qt 框架),它可以编辑存储在由 xsd 模式文件描述的 xml 文件中的数据。有没有将 xsd 架构转换为 C++ 类的工具?
【问题讨论】:
标签: c++ xml qt xsd code-generation
我必须编写一个 C++ 应用程序(使用 GUI 的 Qt 框架),它可以编辑存储在由 xsd 模式文件描述的 xml 文件中的数据。有没有将 xsd 架构转换为 C++ 类的工具?
【问题讨论】:
标签: c++ xml qt xsd code-generation
Altova XML Spy 可以从 XSD 生成 C++,它是商业的,但如果您想试用,可以免费试用 30 天。
【讨论】:
在我看来,CodeSynthesis 正是您要找的。它是开源和 c++ 的。
【讨论】:
我认为有一个 Microsoft 工具可以做到这一点,称为 xsd.exe(但我自己没有尝试过)。
【讨论】:
Codalogic LMX 也是一个选项。
【讨论】:
Objective Systems, Inc. XBinder XML Schema Compiler(不仅适用于 C++)。
【讨论】:
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 测试了可移植性。
【讨论】:
请参阅 Google 的 XmlPlus-xsd2cpp:
XmlPlus xsd2cpp 通过提供“简单易用”的 C++ XML 数据绑定 W3C XML 架构。
GNU Lesser General Public License 涵盖了 XmlPlus 的使用
【讨论】:
Expat基于SAX(带有回调的流解析)的解析器,这使得解析COLLADA等一些文档非常不方便。参考:installation institution
所有的生成器都非常糟糕。
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,因为它的工具很糟糕。
【讨论】: