是否可以使用 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++ 类?的主要内容,如果未能解决你的问题,请参考以下文章