[英]C# HtmlAgilityPack : Error looping throough nodes
我正在遍歷一些<li>
標簽,並且在此標簽中有一個class="track-visit-website"
的<a>
標簽:
<li><a class="track-visit-website" href="abc1">Anchor1</a></li>
我想獲取<a>
標簽的href。 但是在某些<li>
中沒有<a>
標記,因此我的代碼拋出錯誤。
我的代碼是:
List<string> Website = new List<string>();
HtmlDocument hoteleWebsiteDoc = new HtmlDocument();
hoteleWebsiteDoc.LoadHtml(hotels.InnerHtml);
var hotelWebsite = from lnks in hoteleWebsiteDoc.DocumentNode.Descendants()
where lnks.Name == "a" && lnks.Attributes.Contains("class") &&
lnks.Attributes["class"] != null &&
lnks.Attributes["class"].Value.Contains("track-visit-website") &&
lnks.InnerText.Trim().Length > 0
select new
{
Url = lnks.Attributes["href"].Value,
};
foreach (var website in hotelWebsite)
{
if (!string.IsNullOrEmpty(website.Url) || !string.IsNullOrWhiteSpace(website.Url))
Website.Add(website.Url.Trim());
else
Website.Add(" ");
}
我該怎么辦 ? 我想到先檢查標記是否存在,然后執行代碼。 但是,如何檢查標簽是否存在? 還是有其他方法?
var items = hoteleWebsiteDoc
.DocumentNode.SelectNodes("//li/a[@class='track-visit-website']");
if(items!=null)
{
var links = items.Select(a => a.Attributes["href"].Value).ToList();
}
此解決方案考慮a
標記不包含href
屬性的可能情況,例如:
<li>
<a class='track-visit-website' href='abc1'>Anchor1</a>
</li>
<li>
<a class='track-visit-website'>Anchor 2</a>
</li>
<li>
</li>
var hoteleWebsiteDoc = (from element in doc.DocumentNode.Descendants("a")
where element.ParentNode.Name.Equals("li") &&
element.Attributes.Contains("class") &&
element.Attributes.Contains("href") &&
element.Attributes["class"].Value.Equals("track-visit-website")
select new
{
URL = element.Attributes["href"].Value
}).ToList();
foreach (var obj in hrefsList)
{
Console.WriteLine(obj.URL);
}
或者,如果您想保留其他解決方案,則可以更改代碼以檢查是否包含href
屬性:
if (items != null)
{
var links = items.Where(a => a.Attributes.Contains("href")).Select(a => a.Attributes["href"].Value).ToList();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.