使用libxml2库的朋友,可能会对它提供的初始化接口(xmlInitParser )和清除资源接口(xmlCleanupParser )感到困惑.因为在它主页中提供的例子里面,各处使用的情况差别很大. 我花了些时间把这两个接口使用方法整理如下:
1. 在单线程(single-threaded)环境中
xmlInitParser 可以被调用一次,或者被调用多次(多于一次),甚至可以不被调用.
对于第一种情况,很容易理解,因为接口作用是初始化,而且应该在程序的入口处调用. 这也是推荐的使用方法.
对于第二种情况,看其接口的实现代码就很容易理解,第二次以后的调用只是判断完标志位后简单地返回.
--------------------------------------------------------------------------------
void xmlInitParser(void) {
if (xmlParserInitialized != 0)
return;
//do initialization for xml library
…
xmlParserInitialized = 1;
}
--------------------------------------------------------------------------------
对于第三种情况,在作者在mailing list的回答中可找到答案,而且这一点我也已经简单地通过例子验证过.而且在libmxl2自带的很多sample中,都是属于这样的情况.
--------------------------------------------------------------------------------