我正在使用libxml2-2.9.8。
使用libxml解析xml时,我可以使用
ctxt->record_info = true;
xmlInitNodeInfoSeq(&ctxt->node_seq);
xmlParseDocument(ctxt);
记录解析节点的位置。
但是,对于HTML以下
ctxt->record_info = 1;
xmlInitNodeInfoSeq(&ctxt->node_seq);
htmlParseDocument(ctxt);
导致某些(格式不正确)HTML文件的段错误。一个最小的示例是内容为<label></label>
的HTML文件,该文件会导致段错误:
#0 0x0000555555695199 in xmlSAX2EndElement (ctx=0x555555975a20, name=0x55555570141e "body") at external/libxml2/libxml2-2.9.8/SAX2.c:1815
#1 0x000055555561412b in htmlAutoCloseOnEnd (ctxt=0x555555975a20) at external/libxml2/libxml2-2.9.8/HTMLparser.c:1384
#2 0x000055555561cae2 in htmlParseContentInternal (ctxt=0x555555975a20) at external/libxml2/libxml2-2.9.8/HTMLparser.c:4674
#3 0x000055555561d0da in htmlParseDocument (ctxt=0x555555975a20) at external/libxml2/libxml2-2.9.8/HTMLparser.c:4817
#4 0x000055555556f81d in ParseHTML (content="<label></label>\n", nodes=0x7fffffffd7a0, error_message=0x7fffffffd8b0) at parser/xml_parser.cpp:431
#5 0x00005555555711e6 in main (argc=2, argv=0x7fffffffdb08) at parser/xml_parser.cpp:596
用于解析HTML文件的API是否支持记录节点的位置?如果是这样,我在做什么错或者可以采取什么措施来防止段错误?