5

我需要寫一個將其保存在XML格式設置(爲了便於手動編輯),並通過XML消息通過套接字和HTTP現有的應用程序進行通信的Linux下C++應用程序。問題是我沒有找到任何智能庫來幫助我,我不特別想寫DOM或SAX代碼來編寫和閱讀一些非常簡單的消息。C++系列化清潔XML類似XSTREAM

Boost序列化幾乎是一個匹配,但它爲它生成的xml添加了很多特定於boost的數據。對於交換格式來說,這顯然不起作用。我想知道是否有可能使Boost Serialization或其他一些C++序列化庫生成乾淨的xml。我不介意是否有一些必需的額外屬性 - 比如版本屬性,但是我真的想要控制它們的命名,並且擺脫我不使用的'features' - tracking_level和class_id for實例。

理想我只想有類似的東西在Java中西河。我意識到C++缺乏自省,因此有必要進行一些手動編碼 - 但是如果有一個乾淨的解決方案,只需讀取和寫入簡單的XML就可以了,這很好!

如果不能這樣做,我也對XML模式是規範資源(契約第一)的工具感興趣 - 這是一種很好的JAXB替代C++的方法。到目前爲止,我只找到像CodeSynthesis XSD這樣的商業解決方案。我更喜歡開源解決方案。我已經嘗試過gSoap--但它產生了非常難看的代碼,它也是特定於SOAP的。

無奈之下我也開始尋找替代的序列化格式protobuffers。這存在 - 但僅限於Java!我真的很驚訝,協議緩衝區似乎是比XML更好的支持的數據交換格式。

我要瘋了剛剛找到庫爲這個應用程序,我真的需要一些新的想法。任何人?

回答

0

我不知道到底是什麼規定,因此,如果這是你在找什麼,但Qt擁有一個XML模塊。它也有一個網絡模塊,聽起來好像它可能對你有用。

0

爲了進一步拓展Troubadour的答案,我用Qt's XML libraries取得了巨大的成功,可以做的事情非常接近你。在我自己的情況下,我將配置數據序列化到本地文件,然後偶爾將它流式傳輸到其他線程。

QXmlStreamWriterQXmlStreamReader是有問題的兩個類別。 Here是一個使用它們的例子。

對於我自己的XML序列化,我完全控制了生成的實際格式,只需要幾百行代碼即可完成。關於使用Qt的XML,我可以說的最好的事情是我可以專注於內容,讓圖書館做標記數據的痛苦工作 - 這是理想的。

最後,here是關於Qt許可證(商業,GPL,LGPL)的一些信息。

0

從問題的話: 「到目前爲止,我只找到像CodeSynthesis XSD的商業解決方案,我寧願開源解決方案。」

CodeSynthesis XSD可以通過開源項目中使用。產品 有一個商業專有許可但除此之外它也有一個開源許可(GPL版本2,但與 給予額外的自由度)。你被允許與 http://www.gnu.org/licenses/license-list.html

列出的所有 「GPL兼容的自由軟件許可證」和所有「GPL不兼容的免費 軟件許可證」一起使用它CodeSynthesis XSD第三許可證選項是免費專有 小型詞彙許可證。如果您使用的是小XML模式,您可以免費使用該許可證 。

瞭解更多關於此不同CodeSynthesis XSD許可證: http://www.codesynthesis.com/products/xsd/license.xhtml

在功能CodeSynthesis XSD方面還支持序列化 和解析生成的二進制格式。您可以使用該格式 進行有效的溝通。