2009-06-23 69 views
2

我正在嘗試創建一個消息驗證程序,並且想要創建適用於某些消息類型的易於修改的規則。由於規則更改的風險,我決定在目標代碼外部定義這些驗證規則。C++對象的XML表示

我創建了一個定義規則的基本接口,並且想知道存儲這個簡單數據的最佳方式是什麼。我傾向於XML,但它似乎可能太重。

每個規則只需要一小部分數據(即規則類型,值,適用掩碼等)。

有誰知道一個好的資源,我可以看看會執行類似的功能。我寧願不深入研究XML,因爲這個問題似乎幾乎不需要我在碰到的大多數示例中看到的功能的子集。

如果我能找到一個簡明的例子來檢查我將能夠決定是否只是去一個平面文件。

在此先感謝您的意見!

回答

1

個人而言,對於小的,易於修改的XML,我覺得TinyXML是一個很好的庫。您可以讓每個類都瞭解它自己的格式,因此您的對象層次結構直接在XML中表示。

但是,如果您認爲您不需要XML,則可能需要使用像yaml這樣的較輕的存儲。我發現理解底層數據,修改和擴展功能要容易得多。

(此外,boost::serialization具有XML存檔,但它不是我稱之爲易於修改)

+0

TinyXML,不知道這個,我得檢查一下 – 2009-06-23 01:28:13

+0

TinyXML似乎有一個很好的例子,類似於我想要做的。我明天會檢查一下,看看我能不能把一個快速的概念證明放在一起。 感謝您的快速響應! – Brian 2009-06-23 01:43:56

1

最簡單的就是用設計很容易平面文件使用C++來解析>>運營商。簡單的令牌由空格分隔。

+0

這當然是最簡單的,如果我無法快速獲得POC並快速運行,那將是我的後備計劃。 感謝您的意見! – Brian 2009-06-23 01:46:46

1

那麼,如果你希望你的規則是人類可讀的,那麼XML就是要走的路,你可以使用xerces與C++很好的接口。如果您需要性能和/或大小,則可以使用簡單結構將數據保存爲二進制文件。

1

另一種實現此方法的方法是在XML Schema中定義規則,然後使用XML Data Binding工具生成相應的C++對象模型以及XML解析和序列化代碼。一個這樣的工具(即我碰巧工作)是CodeSynthesis XSD:

http://www.codesynthesis.com/products/xsd/

爲理念有2分鐘的概述,請參閱C++ /樹映射文檔中的「Hello World」的例子。