从文档中删除xml节点

时间:2015-04-21 00:08:15

标签: xpath libxml2 vala

我试图在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);
}
提前任何建议:)

1 个答案:

答案 0 :(得分:0)

如果您执行node->unlink;,则无效。它只是获取一个指向unlink函数的函数指针,然后丢弃它。请改为node->unlink();