2009-01-15 34 views
24

Tôi phải viết một ứng dụng C++ (sử dụng khung Qt cho GUI) có thể chỉnh sửa dữ liệu được lưu trữ trong các tệp xml được mô tả bằng tệp lược đồ xsd. Có một công cụ để chuyển đổi lược đồ xsd thành các lớp C++ không?Lược đồ XML cho các lớp C++

Trả lời

23

Âm thanh với tôi như CodeSynthesis chính xác là những gì bạn đang tìm kiếm. Đó là mã nguồn mở và C++.

+18

Cần lưu ý rằng * nguồn mở * hơi phức tạp ở đây. Mã được tạo bởi * CodeSynthesis * cũng được bao gồm trong giấy phép GPL, do đó bạn không thể sử dụng nó trong ứng dụng của mình mà không cần phân phối mã nguồn của toàn bộ ứng dụng của bạn. Có những ngoại lệ cho [sử dụng khối lượng thấp] (http://www.codesynthesis.com/products/xsd/free-license.xhtml) hoặc giấy phép sở hữu độc quyền để mua mặc dù. – Jarekczek

3

Altova XML Spy có thể tạo C++ từ XSD, đó là thương mại nhưng có bản dùng thử miễn phí 30 ngày nếu bạn muốn dùng thử.

0

Có một công cụ của Microsoft thực hiện điều này, tôi nghĩ, được gọi là xsd.exe (nhưng bản thân tôi chưa thử).

+8

Tôi có thể sai, nhưng có vẻ như điều này không hỗ trợ C++, chỉ .Net C#, VB và J # – Andre

+5

xsd.exe không hỗ trợ chuẩn C++, chỉ của Microsoft "được quản lý" C++ sử dụng công cụ CLR XML. – Matthew

3

gSOAP Toolkit cũng có thể làm điều này! Nó nhẹ và hỗ trợ C/C++. Tôi đã sử dụng nó trong các dự án rất khắt khe với thành công. Ngoài ra, nó được cấp phép theo GPL2.

Tính di động: gSOAP hỗ trợ hầu hết các nền tảng, bao gồm hệ thống nhúng và hệ điều hành nhỏ (ví dụ: WinCE, Symbian và PalmOS). Khả năng di động được kiểm tra cho Windows (98, XP, Vista), Linux, Unix, Mac OS X, Solaris, HP-UX, AIX, FreeBSD, TRU64, Irix, QNX và VxWorks.

+3

Xuất hiện để có cùng một giới hạn cấp phép như trình tạo mã CodeSynthesis. –

3

Xem XmlPlus-xsd2cpp tại Google:

XmlPlus xsd2cpp cung cấp "đơn giản để sử dụng" C++ XML data-binding qua W3C XML Schema.

Sử dụng XmlPlus được bao phủ bởi GNU Lesser General Public License

+2

Xin lưu ý rằng công cụ này không phải bởi Google, công cụ này chỉ được lưu trữ tại Google Code. – Beginner

0

Tất cả các máy phát điện là hoàn toàn khủng khiếp.

XSD mô tả một hệ thống phân cấp lớp trong đó các lớp chứa các lớp con, có thể chứa các lớp con khác và tất cả những gì bạn muốn làm là biểu diễn nó theo cùng một cách.

Ví dụ, nếu đây là sơ đồ của bạn:

<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> 

Bạn muốn tạo ra một cái gì đó như:

class shipTo 
{ 
    private: 
    string name; 
    string address; 
    string city; 
    string country; 

    public: 
    set_Name(); 
    get_Name(); 
    ... 
} 

Bạn sẽ không tìm thấy nó. Điều gần nhất tôi đã tìm thấy là xjc, dành cho Java.

Bạn mong đợi một cái gì đó như BASIC như chức năng này sẽ tồn tại, nhưng tôi chưa tìm thấy nó, và có, tôi đã sử dụng Altova XML-Spy. Tôi thực sự ngạc nhiên khi bất kỳ ai đề xuất điều này như một bộ tạo mã. Mã được tạo ra của nó là hoàn toàn khủng khiếp.

Tôi đang viết một trình phân tích cú pháp lex/bison để làm điều này cho dự án của tôi bởi vì tất cả các công cụ tôi đã có thể tìm thấy cho đến nay tạo ra mã khá khủng khiếp. Altova có thời gian dùng thử 30 ngày, nếu bạn không tin tôi, hãy thử nó. Nó dễ dàng hơn để viết một trình phân tích cú pháp lex/bison cho XSD của tôi hơn là sử dụng một gói mã chuyên nghiệp $ 500 để tạo ra một biểu diễn lớp khủng khiếp.

Tôi không thể tin rằng mọi người sử dụng XML trong C++ vì các công cụ cho nó là khủng khiếp.

+0

Bạn có thể chỉ cho chúng tôi một ví dụ về những gì "công cụ xấu" sản xuất và giải thích tại sao bạn nghĩ rằng nó là xấu? –

+0

Không thể trả lời vì tôi bị kẹt trong "định dạng đánh dấu mini" ở đây. Tôi đã cung cấp cho bạn một lược đồ ví dụ - hãy tiếp tục và chạy điệp viên XML của Altova trên đó và so sánh với ví dụ MY hand rolling XSD-> C++ lex/bison/hack tạo ra. Đi trước. Tôi không phải là LEAST ấn tượng với các công cụ có sẵn. XJC tạo ra mã khá tốt, tuy nhiên, nó nằm trong Java nên nó không phù hợp với tôi. Tôi cảm thấy như tôi đang làm việc với dao đá và da gấu. – user6269400

+0

Không có điệp viên Altova ... hãy xem cấu trúc lớp được đề xuất của bạn và đồng ý có vẻ hợp lý. Có lẽ bạn có thể giải thích trong 1-2 câu mà Altova làm mà bạn không thích. –

Các vấn đề liên quan