スポンサーサイト

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

libxml2の使い方メモ

libxml2をC言語で使うときのメモ。

・parseの仕方はexamplesを参照(たくさん例がある)

・逆にツリーをたどったりするサンプルはほとんどないので、google code searchを頼る。

・「ある名前を持った子要素を一つ取り出す」という関数はないため、

xmlNode *get_child (xmlNode *node, const char *tag)
{
xmlNode *child;

for (child = node->children; child != NULL; child = child->next)
if (!strcmp ((char *)child->name, tag))
return child;
return NULL;
}


のようなユーティリティ関数を多くのプロジェクトで書いている。

・XPathで相対ロケーションパスを使う場合、コンテキストのノードにカレントノードを指定する

xpathCtx = xmlXPathNewContext(doc);
xpathCtx->node = currentNode;
xpathObj = xmlXPathEvalExpression(...xpath..., xpathCtx);



・RelaxNGによるバリデーションについても情報は少ない。


// RelaxNGパーサーコンテキストの生成
xmlRelaxNGParserCtxtPtr ctxt = xmlRelaxNGNewMemParserCtxt(rng_string, strlen(rng_string));
// ファイルからなら、docを作ってxmlRelaxNGNewDocParserCtxtを使う。

// RelaxNGパーサーの生成
xmlRelaxNGPtr relaxngschemas = xmlRelaxNGParse(ctxt);
if(relaxngschemas == NULL) {
// エラー処理
}
xmlRelaxNGFreeParserCtxt(ctxt);

// 実際のバリデーション
xmlRelaxNGValidCtxtPtr vctxt = xmlRelaxNGNewValidCtxt(relaxngschemas);
int ret = xmlRelaxNGValidateDoc(vctxt, doc);
if (ret != 0) {
// エラー処理
}
xmlRelaxNGFreeValidCtxt(vctxt);



・RelaxNGのexceptは未実装。

・libxml2に付属のxmllint.cは参考になる。

スポンサーサイト

コメント

非公開コメント

プロフィール

fchiba

Author:fchiba
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

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