2009-07-15 19 views
19

私はシステムとの間でデータをやりとりするためにXMLを使用する組み込みシステムのプロジェクトに取り組んでいます。 snprintf()/strcat()を使用してXML文字列を構築し、XMLを「<」と「>」という文字でカウントしたり、XMLを解析したりするXMLハンドリングを、XMLの処理に取り入れることは望ましくありません。Cエンベデッドシステム用XMLライブラリ

私はいくつかのXMLライブラリを見つけましたが、そのうち2つは十分に小さいかもしれませんが、Cに最も近いのはC++であり、このシステムのカードにはありません。

  • Cのソースコード
  • 安くありません動的メモリ割り当て:私は、私は次の制約を満たしているXMLライブラリを見つけることができます願って。無料ですが、コピーレフトはそのトリックをしません。

完全なパーサーである必要はありません。ネストされた要素からテキストを引き出し、フォーマット文字列に依存しないXMLを生成するための合理的に簡単な方法が必要です。属性は使用されていません(まだ)ので、ライブラリでも属性をサポートする必要はありません。 XML文書はかなり小さくなりますので、DOMのようなものは、クライアント提供のバッファー(生のXMLを解析するのがいいでしょう)で動作する限り、うまくいくでしょう。

PugXMLとTinyXMLはかなり近いと思われますが、私のグーグルが欠けているCベースの組み込みシステム向けのXML libについて知っている人がいることを期待しています。

+1

"copyleft"ライブラリの作者が、あなたのコードに代替の商用使用ライセンスをあなたに販売してもらう可能性があります。 – caf

+7

私があなたの立場にいるのであれば、組み込みシステムの制約のために、私はXMLの代替案を真剣に検討しています。データの性質によっては、生成と解析の両方に多くの処理オーバーヘッドを必要としないデータをカプセル化するより良い方法があります。 –

+0

同様の状況があり、小さなlibが見つかりませんでしたので、バイナリサイズ<20Kの組み込みシステム用に書きましたが、ヒープを使用しています。名前空間を持つASCII文字のみをサポートしています。 ( – Manish

答えて

0

このシナリオでは、Xerces-Cライブラリが最適です。

+3

Xerces-Cは非常に大きく、C++で書かれています – Indy9000

0

かなり小さいXMLになる場合は、sprintfやその他のものを使用してプログラムで生成し、同じものを解析する文字列抽出関数を使用してください。しかし、前述したように、Xerces-cライブラリをオープンソースとして使用することをお勧めします。

13

私はダイナミックメモリの割り当てについてはわかりませんが、標準のC XMLパーサはexpatです。これはそこにある多くのパーサの基礎となるライブラリです。

+0

私はいつもExpatの経験がありました 標準Cで書かれているので、どのプラットフォームにも移植する必要があります。 DOM。あなたは 'コールバック' APIに慣れている必要がありますが、それはかなり簡単です。おすすめ! –

+0

Expatはいくつかの動的メモリ割り当てを行います。コードはかなりローカライズされており、再実装することができます。これは非常に優れたXMLパーサーです。 –

+0

'XML_ParserCreate_MM'を使ってパーサーを作成すると、mallocの実装を使用して自由に提供します。 –

4

私はわからないが、おそらくMini-XML: Lightweight XML Libraryお手伝いを致します。

  1. ミニXMLはANSI C互換のコンパイラが必要です。
  2. フリーウェアです。
  3. バイナリサイズは約100kです。
  4. これはXMLファイル全体を解析し、すべての情報をリンクリストに格納します。
+0

オープンソースのように見えるだけでなく、フリーウェア:-)重要な違い –

1

私はsxmlcをできるだけシンプルに書いており、人々がルータでそれを使用してWebクエリのインプレース解析を行うことを知っています。

残念ながら(私は5年遅れです...)最小限に留めておくと、各 "XML行"(<>の間にあるもの)を読み取るための1つのバッファ)、およびタグ名、属性名および属性を追跡するための多数の小さなバッファ値とテキスト(ただし、私はいつも​​程度を使っていました)。

そしてそれはstrdup/strcpyなどを利用しています。

誰もが自由に使うことができるように、ライセンスはBSDです。

関連する問題