スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

[iOS][C/C++]libxmlのattributesがとれ・・・取れたっ

取れました。
理解にすごく苦しみましたが、こんな感じでした。

[いちば ぶろぐ]
libxml2でrssデータをパースする


※さらに大元がありました。こっちの方がぱっと見でわかりやすかったです。


startElementNsで設定したメソッドに以下のソースを追加します。


#define kStringLengthMax (65535)
for ( i = 0; i < nb_attributes; i++ ) {
char tmp[ kStringLengthMax ];
int len = attributes[4] - attributes[3]; // attributes[3]のデータ長計算
memcpy( tmp, attributes[3], len );
tmp[len] = '\0'; // attributes[3]をC文字列として扱う
printf( "\t\tattributes[%d] - key:%s, value:%s\n", i, attributes[0], tmp );
attributes += 5;
}


これでこういうXMLのソースをパースします。

<entries>
<LoginCheck>
<user id="2" username="nishigaki" group_id="1" created="2011-06-30 12:24:07" modified="2011-06-30 12:24:07" />
</LoginCheck>
</entries>

結果がこうなります。

2011-07-06 16:33:58.408 ImtDic[12528:207] attributes[0] - key:id, value:2
2011-07-06 16:33:58.410 ImtDic[12528:207] attributes[1] - key:username, value:nishigaki
2011-07-06 16:33:58.411 ImtDic[12528:207] attributes[2] - key:group_id, value:1
2011-07-06 16:33:58.414 ImtDic[12528:207] attributes[3] - key:created, value:2011-06-30 12:24:07
2011-07-06 16:33:58.415 ImtDic[12528:207] attributes[4] - key:modified, value:2011-06-30 12:24:07


このattributesの仕組みですがあまりよくわかりません。
ココから憶測の領域なのですが、
このattributesの型、xmlCharというのはchar型をtypedefしているだけです。
そのtypedefを行っているxmlstringクラスというのがありまして、演算子メソッドをオーバーライドしている可能性を考えました。
コチラで紹介されているように、演算子メソッドはオーバーライドして処理を書き換えられます。
私の考えは、以下のようなクラスです。

・xmlCharにはattributes配列が5つ用意されている。
・xmlCharを複数所持する可変配列がある。
・xmlCharのint加算/減算演算子メソッドをオーバーライドし、可変配列のxmlCharを切りかえるポインタとして扱う。

という感じです。
あくまで憶測なので正しいのかはわかりませんが・・・。
詳しく仕組み解説しているサイトがないのでしょうか・・・?








このエントリーをはてなブックマークに追加

コメントの投稿

非公開コメント

Translation


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。