我正在使用expat编写xml解析器。 刚看到这个:
XML_SetElementHandler
XML_Parser parser,
XML_StartElementHandler start,
XML_EndElementHandler end
我不明白应该怎么做 我看到它是一个指向函数的指针:
typedef void (*XML_StartElementHandler)(void *userData,
const XML_Char *name,
const XML_Char **atts);
但我找不到它应该做什么 我很乐意得到一些帮助!
答案 0 :(得分:2)
你给解析器(指向)两个函数,其中一个函数在解析器看到XML元素的开始时被调用(即一旦它读取了开始标记),另一个函数在看到它时被调用元素的结尾(即读取结束标记)(您必须了解元素和标记之间的区别才能进行XML解析)。
解析器在元素开头调用的函数将使用三个参数调用:
void *
)指针(如果您实际上已经通过它)。这是你想用来在回调之间保持状态的任何东西。atts[i]
是属性,则atts[i+1]
是其值。为元素结尾调用的函数具有较短的参数签名(同样是IIRC),因为它不会获得属性列表。
对于大多数常用的XML,你还需要一个字符处理函数来处理字符数据(即开始标记和结束标记之间的东西),你需要反复提醒自己它会<通常,em> not 一次调用所有字符数据;这些数据可能有几个单独的“块”。