HTML Agility Pack - 删除图像的父级超链接
HTML Agility Pack - Removing hyperlinks parent to an image
为了使代码易于解释,我有以下代码,其中我使用 HTML 并使用 HAP 查找所有图像 src
并将其替换为数字。
HtmlDocument document = new HtmlDocument();
document.LoadHtml(htmlString);
int Counter = 0;
document.DocumentNode.Descendants("img")
.Where(e =>
{
string src = e.GetAttributeValue("src", null) ?? "";
return !string.IsNullOrEmpty(src);
})
.ToList()
.ForEach(x =>
{
string currentSrcValue = x.GetAttributeValue("src", null);
localImgPath = "<Somepath>IMG_" + Counter.ToString() + ".jpg";
Counter++;
});
x.SetAttributeValue("src", localImgPath);
});
输入 : <img src="https://imagepath"/>
输出:<img src="<somepath>IMG_1.jpg"/>
现在这完美地工作了
但我面临的问题是,有些图像在 hyperlink
内,例如
<a href="https://imagepath"><img src="https://imagepath"/></a>
在处理图片的过程中,我想知道图片是否在超链接内,然后删除超链接,如下所示
输入 : <a href="https://imagepath"><img src="https://imagepath"/></a>
输出:<img src="<somepath>IMG_1.jpg"/>
需要注意的一点是,我不想删除 HTML 中的所有超链接,只删除作为图像父级的超链接。
是否可以使用 HAP?
您应该可以使用以下代码完成此操作。您可能想要获取所有图像元素并检查父元素。如果父级是 link,则应将其添加到要删除的节点列表中。
var images = document.DocumentNode.Descendants("img").ToList();
var nodesToRemove = new List<HtmlNode>();
foreach (var image in images)
{
var parent = image.ParentNode;
if (parent.Name.Equals("a"))
{
nodesToRemove.Add(parent);
}
}
然后通过获取其父节点并调用 RemoveChild
方法来删除这些节点。这将采用您想要删除的节点,加上一个布尔值,说明是否保留孙子(在这种情况下,您希望保留图像元素)。
foreach (var node in nodesToRemove)
{
node.ParentNode.RemoveChild(node, true);
}
为了使代码易于解释,我有以下代码,其中我使用 HTML 并使用 HAP 查找所有图像 src
并将其替换为数字。
HtmlDocument document = new HtmlDocument();
document.LoadHtml(htmlString);
int Counter = 0;
document.DocumentNode.Descendants("img")
.Where(e =>
{
string src = e.GetAttributeValue("src", null) ?? "";
return !string.IsNullOrEmpty(src);
})
.ToList()
.ForEach(x =>
{
string currentSrcValue = x.GetAttributeValue("src", null);
localImgPath = "<Somepath>IMG_" + Counter.ToString() + ".jpg";
Counter++;
});
x.SetAttributeValue("src", localImgPath);
});
输入 : <img src="https://imagepath"/>
输出:<img src="<somepath>IMG_1.jpg"/>
现在这完美地工作了
但我面临的问题是,有些图像在 hyperlink
内,例如
<a href="https://imagepath"><img src="https://imagepath"/></a>
在处理图片的过程中,我想知道图片是否在超链接内,然后删除超链接,如下所示
输入 : <a href="https://imagepath"><img src="https://imagepath"/></a>
输出:<img src="<somepath>IMG_1.jpg"/>
需要注意的一点是,我不想删除 HTML 中的所有超链接,只删除作为图像父级的超链接。
是否可以使用 HAP?
您应该可以使用以下代码完成此操作。您可能想要获取所有图像元素并检查父元素。如果父级是 link,则应将其添加到要删除的节点列表中。
var images = document.DocumentNode.Descendants("img").ToList();
var nodesToRemove = new List<HtmlNode>();
foreach (var image in images)
{
var parent = image.ParentNode;
if (parent.Name.Equals("a"))
{
nodesToRemove.Add(parent);
}
}
然后通过获取其父节点并调用 RemoveChild
方法来删除这些节点。这将采用您想要删除的节点,加上一个布尔值,说明是否保留孙子(在这种情况下,您希望保留图像元素)。
foreach (var node in nodesToRemove)
{
node.ParentNode.RemoveChild(node, true);
}