正在从文档中删除 xml 个节点
Removing xml node from document
我试图在 html 文档中使用 xpath 查找某些节点。然后删除它们。
在这个例子中,我正在寻找一个 ID 为 "atoc_next" 的节点。找到了正确的节点,我取消了它的链接。然后我搜索一个节点 "article" 并将其写入文件。然而,原本应该取消链接的节点(文章节点的子节点)仍然存在。知道有什么问题吗?顺便说一句:如果我在取消链接后删除或 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);
}
感谢任何提前的建议:)
如果你node->unlink;
,这没有效果。它只是获取一个指向 unlink 函数的函数指针,然后丢弃它。改为 node->unlink();
。
我试图在 html 文档中使用 xpath 查找某些节点。然后删除它们。 在这个例子中,我正在寻找一个 ID 为 "atoc_next" 的节点。找到了正确的节点,我取消了它的链接。然后我搜索一个节点 "article" 并将其写入文件。然而,原本应该取消链接的节点(文章节点的子节点)仍然存在。知道有什么问题吗?顺便说一句:如果我在取消链接后删除或 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);
}
感谢任何提前的建议:)
如果你node->unlink;
,这没有效果。它只是获取一个指向 unlink 函数的函数指针,然后丢弃它。改为 node->unlink();
。