我有一些 HTML 片段,其中包含一些带有 href 的链接,这些链接以主题标签开头,如下所示
<a href="#Getting Started">Getting Started</a>
我是 AngleSharp 的新手,我正在尝试使用它来查找这些链接并将 href 替换为新值,然后返回更新的 HTML 标记。
最佳答案
AngleSharp 的优点在于,您基本上可以回退到任何 JS 解决方案 - 因为 AngleSharp 公开了 W3C DOM API(JS 也使用该 API)。您所需要做的就是将某些驼峰命名法替换为 PascalCase 并使用标准 .NET 工具而不是 JS 中的东西。
我们以 How to Change All Links with javascript 为例(抱歉,这是我 Google 搜索中的第一个点击)并以此为起点。
var context = BrowsingContext.New(Configuration.Default);
var document = await context.OpenAsync(res => res.Content(""));
var anchors = document.GetElementsByTagName("a");
for (var i = 0; i < anchors.Length; i++)
{
var anchor = anchors[i] as IHtmlAnchorElement;
anchor.Href = "http://example.com/?redirect=" + anchor.Href;
}
因此,在我们的例子中,我们对相同的转换不感兴趣,而是对非常相似的转换感兴趣。我们可以这样做:
for (var i = 0; i < anchors.Length; i++)
{
var anchor = anchors[i] as IHtmlAnchorElement;
if (anchor.GetAttribute("href")?.StartsWith("#") ?? false)
{
anchor.Href = "your-new-value";
}
}
原因是 Href
总是标准化的(即完整的 URL),因此“#foo”的属性值可能看起来像“http://example.com/path#foo ”。通过查看原始值,我们可以假设该值仍然以哈希符号开头。
关于c# - 如何使用 AngleSharp 查找和替换链接上的 href 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63233646/