删除父节点但保留子节点 htmlagility 包?
Remove parent node but keep child node htmlagility pack?
好的,我在这里被难住了,我怎样才能删除父节点并用它的子节点替换它?
我的目标是从图像中删除出站 link。我不想从文档中删除正常的 links,只是删除那些使图像变成 link 的图像,同时保持图像完整。
示例:
<a href="http://www.w3schools.com"><img src="logo_w3s.gif"></a>
应该替换成:
<img src="logo_w3s.gif">
这是我的代码,它不起作用,但我觉得它越来越接近了:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(maintext);
dynamic allimages = doc.DocumentNode.Descendants("img").ToList;
if (scrapeimages.Checked) {
//the user does want images scraped. Remove image outbound links
try {
foreach (void n_loopVariable in allimages) {
n = n_loopVariable;
if (n.ParentNode.Name == "a") {
dynamic outer = n.OuterHtml;
dynamic newnode = HtmlNode.CreateNode(outer);
n.ParentNode.ReplaceChild(n.ParentNode, newnode);
}
}
maintext = doc.DocumentNode.OuterHtml;
} catch {
}
}
var node = doc.DocumentNode.SelectSingleNode(yourANode);
node.ParentNode.RemoveChild(node, true);
这样的事情应该有所帮助,这将删除您 <a>
的父节点的子节点,但它会保留孙子节点。 RemoveChild
中的这个true参数表示keepGrandChild
.
如果所有 <img>
有 <a>
var nodeList = doc.DocumentNode.SelectNodes("img");
for(HtmlNode node in nodeList)
{
var parentATagNode = node.Parent.Parent;
parentATagNode.RemoveChild(node.Parent, true);
}
好的,我在这里被难住了,我怎样才能删除父节点并用它的子节点替换它?
我的目标是从图像中删除出站 link。我不想从文档中删除正常的 links,只是删除那些使图像变成 link 的图像,同时保持图像完整。 示例:
<a href="http://www.w3schools.com"><img src="logo_w3s.gif"></a>
应该替换成:
<img src="logo_w3s.gif">
这是我的代码,它不起作用,但我觉得它越来越接近了:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(maintext);
dynamic allimages = doc.DocumentNode.Descendants("img").ToList;
if (scrapeimages.Checked) {
//the user does want images scraped. Remove image outbound links
try {
foreach (void n_loopVariable in allimages) {
n = n_loopVariable;
if (n.ParentNode.Name == "a") {
dynamic outer = n.OuterHtml;
dynamic newnode = HtmlNode.CreateNode(outer);
n.ParentNode.ReplaceChild(n.ParentNode, newnode);
}
}
maintext = doc.DocumentNode.OuterHtml;
} catch {
}
}
var node = doc.DocumentNode.SelectSingleNode(yourANode);
node.ParentNode.RemoveChild(node, true);
这样的事情应该有所帮助,这将删除您 <a>
的父节点的子节点,但它会保留孙子节点。 RemoveChild
中的这个true参数表示keepGrandChild
.
如果所有 <img>
有 <a>
var nodeList = doc.DocumentNode.SelectNodes("img");
for(HtmlNode node in nodeList)
{
var parentATagNode = node.Parent.Parent;
parentATagNode.RemoveChild(node.Parent, true);
}