English 中文(简体)
XML模式到C ++类 [已关闭]
原标题:
  • 时间:2009-01-15 07:14:31
  •  标签:

我们不允许寻求书籍、工具、软件库等方面推荐的问题。您可以编辑问题,以便于回答基于事实和引用的问题。

Closed 6 years ago.

The community reviewed whether to reopen this question 4 months ago and left it closed:

原关闭原因尚未解决。

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

最佳回答

听起来像是你在寻找的正是CodeSynthesis。它是开源的,使用C++。

问题回答

请在Google上查看XmlPlus-xsd2cpp

XmlPlus xsd2cpp provides "simple to use" C++ XML data-binding through W3C XML-Schema.

XmlPlus的使用受GNU Lesser General Public License的保护。

gSOAP工具包也可以实现这一点!它很轻便,支持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公司的XBinder XML Schema编译器(不仅适用于C ++)。

Codalogic LMX也是一种选择。

有一个微软工具可以做到这一点,我想叫作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的。

你会期望像这样基本的功能应该存在,但我还没有找到它,是的,我已经使用过Altova XML-Spy。我非常惊讶有人会将其建议为代码生成器。它生成的代码真的很糟糕。

我正在编写一个基于lex/bison的解析器,以便在我的项目中使用,因为到目前为止我找到的所有工具都会生成相当可怕的代码。如果你不相信,请试试Altova的30天试用期。使用lex/bison解析器编写我的XSD比使用一个价值500美元的专业代码包来生成可怕的类表示要容易得多。

我无法相信人们在C++中使用XML,因为它的工具太糟糕了。





相关问题
热门标签