2010-09-22 42 views
1

我有一個c程序,它從XML文件中獲取它的設置。目前我使用Xerces來遍歷數據,但將每個XML值映射到一個變量變得非常繁瑣。XML - > C語法分析器生成器

同樣的XML也被Java程序讀取,由於JAXB在Java中創建了所有必需的類和類,所以它更加方便。我正在尋找類似的東西,可以創建一個「結構結構」或其他類似的東西。獲取c結構非常重要,而不是C++類,因爲此代碼將在GPU上運行。

我發現「XML助推器」,我正在閱讀它的文檔。你知道其他選擇嗎?需要在Linux中使用。

回答

1

我使用libxml庫。您仍然需要遍歷XML,但是您會得到一個鏈接列表,其中包含元素,屬性,節點和子節點,您可以按照這些鏈接列表進行操作。

鏈接:http://xmlsoft.org/index.html

+0

謝謝,但libxml和xerces之間有很大的區別嗎?我已經得到了一個節點列表,並且我循環了。我可能只是錯過了一些關於libxml的工作原理的基本知識,但是我看了一下,得出的結論並不能改善這種情況。 – Claes 2010-09-23 08:08:38

+0

我不知道Xerces。我是「回答」你的「將每個XML值映射到變量」部分。 – 2010-09-23 08:30:04

+0

我很感謝你回答了我的問題,但「將每個XML值映射到變量」是我試圖擺脫的問題,而不是重新創建:) – Claes 2010-09-23 08:48:46

0

如果你有一個XML模式,檢查XSD codesynthesis。它產生很不錯的C爲您的XSD ++對象,你並不需要直接處理的Xerces: http://www.codesynthesis.com/products/xsd/

+0

這是一個很好的選擇,但我應該在問題中更清楚地表達自己。類不是一個選項,因爲大部分應用程序都在GPU上運行。我需要純粹的C代碼。我更新了我的問題以更好地反映這一點。 – Claes 2010-09-23 11:27:02

+1

這就是爲什麼你需要考慮Bison + Flex。 – Viet 2010-12-07 03:46:01

1

鑑於你的XML文件具有共同的模式,你可以使用野牛+ Flex或者乾脆ANTLR(C運行時)來構建語法並將XML文件中的值提取到變量中。這些將生成純C語言的解析器,因此您無需擔心。