如何解析rel =「canonical」標記與html文檔中的URL?用HtmlAgilityPack解析rel規範
我想在這裏找到的網址:
<link rel="canonical" href="http://stackoverflow.com/questions/2593147/html-agility-pack-make-code-look-neat" />
如何解析rel =「canonical」標記與html文檔中的URL?用HtmlAgilityPack解析rel規範
我想在這裏找到的網址:
<link rel="canonical" href="http://stackoverflow.com/questions/2593147/html-agility-pack-make-code-look-neat" />
假設doc
是你HtmlDocument
對象。
HtmlNodeCollection links = doc.DocumentNode.SelectNodes("//link[@rel]");
應該讓你有一個rel
屬性link
元素。現在迭代:
foreach (HtmlNode link in links)
{
string url;
if (link.Attributes["rel"] == "canonical") {
url = link.Attributes["href"];
}
}
此外,它可以過濾中的SelectNodes鏈接調用只與「規範」得到的那些:doc.DocumentNode.SelectNodes("//link[@rel='canonical']");
沒有測試代碼,但你的想法:)
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(_html);
String link = (from x in doc.DocumentNode.Descendants()
where x.Name == "link"
&& x.Attributes["rel"] != null
&& x.Attributes["rel"].Value == "canonical"
&& x.Attributes["href"] != null
select x.Attributes["href"].Value).FirstOrDefault();
接受的答案不再是正確的,更新的代碼如下:
var links = htmlDoc.DocumentNode.SelectNodes("//link[@rel]");
string canonical;
foreach (HtmlNode link in links)
{
if (link.Attributes["rel"].Value == "canonical")
{
canonical = link.Attributes["href"].Value;
}
}
接受的答案有什麼問題?它似乎仍然有效?可能是單引號還是雙引號的問題? –
@MossPalmer這是幾個月前的事,但是IIRC你需要**。現在的價值** – JMK
啊是的。謝謝你清理那個。我甚至沒有看。值得注意的是,在你的回答中。謝謝。 –
豈不'//鏈接[@ rel ='canonical']'更容易? –
我正要說,是的:) – CyberDude