我试图在html文档中使用xpath查找某些节点。然后删除它们。 在这个例子中,我正在寻找一个id为“atoc_next”的节点。找到正确的节点,然后取消链接。然后我搜索节点“文章”并将其写入文件。但是,之前应该取消链接的节点(文章节点的子节点)仍然存在。有什么想法错了吗?顺便说一句:如果我在取消链接后删除或free_list()节点,代码sefaults = /
var html_cntx = new Html.ParserCtxt();
html_cntx.use_options(Html.ParserOption.NOWARNING);
html_cntx.use_options(Html.ParserOption.NOERROR);
var doc = html_cntx.read_file("document.txt");
Xml.XPath.Context cntx = new Xml.XPath.Context(doc);
Xml.XPath.Object* res = cntx.eval_expression("//a[@id='atoc_next']");
assert (res != null);
assert (res->type == Xml.XPath.ObjectType.NODESET);
assert (res->nodesetval != null);
for(int i = 0; i < res->nodesetval->length(); i++)
{
Xml.Node* node = res->nodesetval->item(i);
node->unlink;
}
delete res;
res = cntx.eval_expression("//article");
assert (res != null);
assert (res->type == Xml.XPath.ObjectType.NODESET);
assert (res->nodesetval != null);
FileStream stream = FileStream.open("article.html", "w");
assert (stream != null);
for(int i = 0; i < res->nodesetval->length(); i++)
{
Xml.Node* node = res->nodesetval->item(i);
doc->node_dump_file(stream, node);
}
提前任何建议:)
答案 0 :(得分:0)
如果您执行node->unlink;
,则无效。它只是获取一个指向unlink函数的函数指针,然后丢弃它。请改为node->unlink();
。