如何使用 AngleSharp 查找和替换链接上的 href 值?
How to find and replace href values on links using AngleSharp?
我有一些 HTML 的片段,其中包含一些带有 href 的链接,这些链接以 hashtag 开头,如下所示
<a href="#Getting Started">Getting Started</a>
我是 AngleSharp 的新手,我正在尝试使用它来查找这些链接并将 href 替换为新值,然后 return 返回更新后的 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"。通过查看 raw 值,我们可以假设该值仍然以哈希符号开头。
我有一些 HTML 的片段,其中包含一些带有 href 的链接,这些链接以 hashtag 开头,如下所示
<a href="#Getting Started">Getting Started</a>
我是 AngleSharp 的新手,我正在尝试使用它来查找这些链接并将 href 替换为新值,然后 return 返回更新后的 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"。通过查看 raw 值,我们可以假设该值仍然以哈希符号开头。