是否可以使用 Qt(不使用 XSD 工具)从 xsd 生成 C++ 类?

Posted

技术标签:

【中文标题】是否可以使用 Qt(不使用 XSD 工具)从 xsd 生成 C++ 类?【英文标题】:Is it possible to generate a C++ class from a xsd using Qt (without the XSD tool)? 【发布时间】:2011-08-30 12:55:19 【问题描述】:

我在一个 xml 文件中列出了几个数据集。我必须提取每个数据集并根据它们的值进行一些操作(不更改 xml 文件的内容)。 所以我必须解析那个文件。

使用 .Net 框架,我只需使用 XSD 工具生成匹配类,避免自己编写解析器。不幸的是,该项目必须使用 Qt 和 mingw 完成,我不确定是否有类似的工具。

是否可以(自动)从 xsd 生成 c++/qt 类?

如果是:如何?

【问题讨论】:

嗯...刚刚找到这个***.com/questions/445905/xml-schema-to-c-classes 【参考方案1】:

好问题!如果 Qt 有这样的功能,你不必担心。您可以使用开源的CodeSynthesisXSD。您可以将生成的类组合到您的 Qt 项目中。

【讨论】:

CodeSynthesis XSD 似乎是我要找的东西 虽然答案确实提供了另一种选择,但我发现它不是一个正确的答案。首先应该查看 CodeSynthesisXSD 的许可政策,这与 Qt 的不同。这可能会导致(取决于 OP 正在处理的 Qt 项目)法律问题。其次,这是一个外部依赖项,它(同样取决于 Qt 项目)可能是应该避免的(出于某种原因)。【参考方案2】:

您可能想查看CodeSynthesis XSD 见this

【讨论】:

注意 GPL 许可证。【参考方案3】:

您也可以使用xsd.exe 生成C++ 代码。它与 Visual Studio 一起使用,xsd /language 将显示 xsd.exe 支持哪些语言,其中还包括 CPP。

【讨论】:

xsd.exe 不会生成 vanilla C++(如 C++03、C++11)但 C++/CLI - 您可以通过查看生成的标头看到这一点:#using <mscorlib.dll、@987654328 @ 或 private: System::String^ receiverField; 不是您在 C++ 中所期望的。我的问题是针对C++,而不是针对C++/CLI。除非你可以强制 xsd exe 生成 C++11 代码,否则 xsd 不是工具。 是的,你是对的。我现在面临同样的问题。那么,毕竟,你使用CodeSynthesisXSD 它会生成vanilla C++ 代码吗? 我不记得我是否真的使用它来生成生产代码,但我记得使用它。 使用 CodeSynthesis 也提供相同的输出,即 C++/CLI,而不是普通 C++。 #using <mscorlib.dll> #using <System.dll> #using <System.Data.dll> #using <System.Xml.dll> 包含在头文件中。【参考方案4】:

我认为使用xmlpatterns module in qt 应该非常简单和qt 方式来解析xsd 并制作相应的qt c++ 表示。

【讨论】:

以上是关于是否可以使用 Qt(不使用 XSD 工具)从 xsd 生成 C++ 类?的主要内容,如果未能解决你的问题,请参考以下文章

从深层嵌套的xsd元素生成枚举

引用通用类型的 XSD Gen 类

XML模式文件中xs和xsd的区别?

带有“必需”属性选项的 XSD 相关查询

XSD 中的循环依赖是不是有效?

使用Notepad ++ XML Tools创建XSD