我使用 libxml2 库创建了一个 SAX 验证器。
这是我创建它的方式:
void OnStartElementNs(
void *ctx,
const xmlChar *localname,
const xmlChar *prefix,
const xmlChar *URI,
int nb_namespaces,
const xmlChar **namespaces,
int nb_attributes,
int nb_defaulted,
const xmlChar **attributes) {}
void OnEndElementNs(
void* ctx,
const xmlChar* localname,
const xmlChar* prefix,
const xmlChar* URI) {}
void OnCharacters(void *ctx, const xmlChar *ch, int len)
{
char chars[len + 1];
strncpy(chars, (const char *)ch, len);
chars[len] = '\0';
}
xmlSAXHandler make_sax_handler ()
{
xmlSAXHandler SAXHander;
memset(&SAXHander, 0, sizeof(xmlSAXHandler));
SAXHander.initialized = XML_SAX2_MAGIC;
SAXHander.startElementNs = OnStartElementNs;
SAXHander.endElementNs = OnEndElementNs;
SAXHander.characters = OnCharacters;
return SAXHander;
}
xmlSAXHandler mySAXHandler = make_sax_handler();
所以我得到了一个 xmlSAXHandler 对象,如果我想释放内存,我可以单独释放每个变量,比如使用 xmlFree(xmlChar*)。我是 XML 和 libxml2 的新手,所以我想知道是否有一种方便的方法可以释放整个结构。
谢谢!