为了使代码易于解释,我有以下代码,其中我使用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);
});
INPUT :<img src="https://imagepath"/>
输出:<img src="<somepath>IMG_1.jpg"/>
现在这完美无缺
但我面临的问题是,有些图片在hyperlink
内,例如
<a href="https://imagepath"><img src="https://imagepath"/></a>
在处理图像时我想知道图像是否在超链接内并删除超链接,如下所示
INPUT :<a href="https://imagepath"><img src="https://imagepath"/></a>
输出:<img src="<somepath>IMG_1.jpg"/>
需要注意的是,我不想删除HTML中的所有超链接,只删除作为图像父级的超链接。
是否可以使用HAP?
答案 0 :(得分:0)
您应该可以使用以下代码完成此操作。您可能希望获取所有图像元素并检查父级。如果父级是链接,则应将其添加到要删除的节点列表中。
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
方法来删除这些节点。这将取出你想删除的节点,加上一个bool,说明是否要保留孙子(在这种情况下,你想要保留图像元素,这就是你想要的。)
foreach (var node in nodesToRemove)
{
node.ParentNode.RemoveChild(node, true);
}