繁体   English   中英

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

[英]How to find and replace href values on links using AngleSharp?

我有一些 HTML 的片段,其中包含一些带有以主题标签开头的 href 链接,如下所示

<a href="#Getting Started">Getting Started</a>

我是 AngleSharp 的新手,正在尝试使用它来查找这些链接并将 href 替换为新值,然后返回更新的 HTML 标记。

AngleSharp 的美妙之处在于您基本上可以回退到任何 JS 解决方案——因为 AngleSharp 公开了 W3C DOM API(JS 也使用它)。 您需要做的就是用 PascalCase 替换某些 camelCase 并使用标准 .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”。 通过查看原始值,我们可以假设该值仍然以 hash 符号开头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM