2009-07-15 50 views
19

我正在開發一個嵌入式系統的項目,該項目使用XML將數據導入和導出系統。我不希望XML處理轉移到使用snprintf()/strcat()和朋友構建XML字符串的一堆位中,或者通過計算「<」和「>」字符來解析XML。C嵌入式系統的XML庫

我發現了幾個XML庫,其中一些甚至可能足夠小,但最接近C的是C++,它不適用於此系統。我希望我能找到符合下列約束條件的XML庫:

  • C源代碼
  • 沒有動態內存分配
  • 便宜。免費是更好的,但copyleft不會做到這一點。

它不一定是一個完整的解析器 - 我只是想能夠從嵌套元素中提取文本,並有一個合理簡單的方法來生成不依賴於格式字符串的XML。屬性還沒有被使用,所以庫不需要甚至支持它們。 XML文檔將會非常小,所以類似於DOM的東西應該沒問題,只要它能夠與客戶端提供的緩衝區一起工作(解析原始XML就地很好)。

PugXML和TinyXML看起來相當接近,但我希望那裏的人知道爲僅基於C的嵌入式系統定製的XML庫,我的搜索引擎沒有找到。

+1

某些「copyleft」庫的作者可能願意且能夠向您推銷其他代碼的商業用途許可證。 – caf 2009-07-16 08:23:26

+7

如果我處於你的位置,由於嵌入式系統的限制,我會認真考慮替代XML。根據數據的性質,可能有更好的方法來封裝數據,這些數據不需要太多的處理開銷,無論是生成還是解析。 – 2009-07-19 05:46:46

+0

我們有類似的情況,找不到任何小的lib,所以我最終爲二進制大小<20K的嵌入式系統編寫了一個,但它使用了堆。它僅支持帶名稱空間的ASCII字符。希望我可以幫助你,但它的專有:( – Manish 2011-01-21 06:23:11

回答

0

在這種情況下,Xerces-C庫最適合使用。

0

如果它將是非常小的XML,爲什麼不用編程方式生成,使用sprintf或其他東西,並使用字符串提取功能來解析相同。但如前所述,如果有點大,建議使用Xerces-c Library,因爲它是開源的

13

我不知道動態內存分配,但標準的C XML解析器是expat,這是許多解析器的底層庫。

4

我不知道,但也許Mini-XML: Lightweight XML Library將幫助您:

  1. 的Mini-XML只需要一個ANSI C編譯器兼容。
  2. 它是免費軟件。
  3. 它的二進制大小約爲100k。
  4. 它解析整個xml文件,然後將所有信息存儲到鏈接列表中。
1

我寫了sxmlc儘可能簡單,我知道人們在路由器中使用它來執行就地解析Web查詢。

不幸的是(我已經晚了5年......)它確實使用內存分配,儘管保持最低限度:一個緩衝區用於讀取每個「XML行」(位於<>之間,對不起);以及許多小緩衝區,用於跟蹤標記名稱,屬性名稱和價值觀和文字(儘管我一直想使用​​左右)。

它利用了strdup/strcpy等。

因爲我想任何人都可以自由使用它,許可證是BSD。