c# - 如何使用 AngleSharp 查找和替换链接上的 href 值?

标签 c# html anglesharp

我有一些 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/

相关文章:

html - 为什么这个html5页面上有一个垂直滚动条?

html - Bootstrap : Navigation points should stack in mobile view and padding inside navigation points should not overlap

c# - 使用 Anglesharp 从 html 字符串中获取列表 <li> 标签的集合

c# - 使用 ASP.NET 样板将 ValueObject 存储在数据库中

C# - String.GetHashCode() -> 不要用作唯一标识符

html - 列何时收缩到其最大值以下?

c# - 如何在 AngleSharp 中解析来自匿名 block 的文本?

c# - asp.net core 3 响应缓存未按预期工作

c# - 如何通过代码让一个GameObject颠倒过来?

c# - 使用 AngleSharp 获取和下载图片