Libxml2和HTML:如何记录节点信息?

时间:2019-04-15 06:48:52

标签: libxml2

我正在使用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是否支持记录节点的位置?如果是这样,我在做什么错或者可以采取什么措施来防止段错误?

0 个答案:

没有答案