我需要知道在使用xmlReadMemory获取dom之后,可以在dom中某个特定的任意节点找到xml字符串中的哪个偏移量。问题是我不知道从哪里获取xmlParserCtxtPtr作为第一个参数传递给xmlParserFindNodeInfo,因为我的整个解析过程不会产生这样的上下文。只有一个xmlDoc。
答案 0 :(得分:0)
以下代码对我有用(libxml2文档没什么要求,必须下载源代码并在lib中进行挖掘,直到我了解足够多的知识才能一起破解)。关键是:
xmlSetFeature(ctxt, "gather line info", (void *)&v);
下面是一些代码来说明:
const char *xml = ...
xmlParserCtxt *ctxt = NULL;
xmlDoc *doc = NULL;
if (!(ctxt = xmlCreateDocParserCtxt((const unsigned char *)xml)))
return -1;
int v = 1;
xmlSetFeature(ctxt, "gather line info", (void *)&v);
if (xmlParseDocument(ctxt) == -1)
{
xmlFreeParserCtxt(ctxt);
return -1;
}
else
{
if ((ctxt->wellFormed) || ctxt->recovery)
doc = ctxt->myDoc;
else
{
xmlFreeParserCtxt(ctxt);
return -1;
}
}
// use doc to get a node and then xmlParserFindNodeInfo(ctxt, node)
…
xmlFreeParserCtxt(ctxt);