C言語でxmlを読み込む方法についてメモ.ライブラリはlibxml2 を使った.
xmlをパースするAPIには,大きくわけてSAXとDOMの2種類ある.両者を比較すると以下のようになる.
SAX (Simple API for xml) | DOM (Document Object Model) | |
---|---|---|
メモリ消費量 | 少ない | 多い |
xml中の各要素へのアクセス方法 | シーケンシャル・アクセス | ランダム・アクセス |
libxml2のSAX型のAPIとしては xmlReader がある.xmlReaderの使い方は,http://xmlsoft.org/examples/index.html#xmlReaderにあるサンプルコードを見ると良い.
大まかな使い方は以下の通り
xmlTextReaderPtr reader; reader = xmlNewTextReaderFilename("hogehoge.xml"); while (xmlTextReaderRead(reader) == 1) { 各要素の処理 } xmlFreeTextReader(reader);
xmlTextReaderRead(reader)は各要素を切り出す関数.切り出した要素に関する情報を取得するAPIはだいたい以下の関数だけ知っておけば良さげ.
- xmlTextReaderNodeType(reader)
要素の種別を返す.libxml/xmlrader.h にて定義されているが,だいたい以下の値のみ気にすれば何とかなるみたい.
XML_READER_TYPE_ELEMENT | 要素の開始タグ |
XML_READER_TYPE_TEXT | タグに囲まれた要素 |
XML_READER_TYPE_SIGNIFICANT_WHITESPACE | 改行など |
XML_READER_TYPE_END_ELEMENT | 要素の終了タグ |
- xmlTextReaderConstName(reader);
要素の名前を得る.要素がタグであればその文字列となる.参照を返すだけなので解放は不要.
- xmlTextReaderConstValue(reader);
要素の値を得る.要素が参照を返すだけなので解放は不要.
- xmlTextReaderDepth(reader)
要素のdepthを返す.depth は タグの入れ子の段数で,最上位は0.
とりあえず以上の情報だけでなんとかパーサは書ける.
C++によるXML開発技法
posted with amazlet at 09.04.05
ファビオ アルシニェガス
ピアソンエデュケーション
売り上げランキング: 265745
ピアソンエデュケーション
売り上げランキング: 265745