我正在使用HTML Agility Pack來定義返回網頁上鍊接的函數。問題是它返回包括mailto在內的所有鏈接。問題返回<a>不包含mailto鏈接的鏈接
在程序的後面,當處理鏈接時,mailto鏈接斷開。我試圖消除
我的函數定義爲它們在_links
的功能輸出列表包括:var linkNodes = _htmlDocument.Value.DocumentNode.SelectNodes("//a");
if (linkNodes == null)
return Enumerable.Empty<Link>();
var links = new List<Link>();
foreach (var linkNode in linkNodes)
{
var href = linkNode.GetAttributeValue("href", "#");
if (!Uri.IsWellFormedUriString(href, UriKind.RelativeOrAbsolute))
continue;
var url = href.ToAbsoluteUri(Url);
var follow = linkNode.GetAttributeValue("rel", "follow");
links.Add(new Link(Url, url, linkNode.InnerText, follow));
}
_links = links;
我的LINQ,幾乎工作(在擺脫郵寄地址的工作,但返回的字符串代替搭配使用的戰鬥機的節點):
var linkNodes = _htmlDocument.Value.DocumentNode.SelectNodes("//a[@href]")
.Select(a => a.Attributes["href"].Value)
.Where(href => !href.StartsWith("mailto:")) // skip emails, find only url links
.ToList();
嘗試將您的linq改爲'htmlDocument.Value.DocumentNode.SelectNodes(「// a [@href]」)。其中(a =>!a.Attributes [「href」]。Value.StartsWith(「mailto: 「))。ToList();' –
在其中一個迭代中出現錯誤:{」值不能爲空。\ r \ nParameter name:source「} – kacalapy
嘗試使用空條件運算符(如果有c#6)。 'htmlDocument.Value.DocumentNode.SelectNodes(「// a [@href]」)。其中(a =>!a.Attributes [「href」]。Value?.StartsWith(「mailto:」)?? false)。 ToList();' –