C# 使用HtmlAgilityPack解析rel规范
如何从html文档解析带有URL的rel=“canonical”标记 我想在这里找到url:C# 使用HtmlAgilityPack解析rel规范,c#,html-agility-pack,C#,Html Agility Pack,如何从html文档解析带有URL的rel=“canonical”标记 我想在这里找到url: <link rel="canonical" href="http://stackoverflow.com/questions/2593147/html-agility-pack-make-code-look-neat" /> 假设doc是您的HtmlDocument对象 HtmlNodeCollection links = doc.DocumentNode.SelectNodes("//l
<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
属性的链接
元素。现在迭代:
foreach (HtmlNode link in links)
{
string url;
if (link.Attributes["rel"] == "canonical") {
url = link.Attributes["href"];
}
}
此外,还可以在SelectNodes调用中过滤链接,只获取带有“canonical”的链接:doc.DocumentNode.SelectNodes(“//link[@rel='canonical']”)代码>
未测试代码,但您得到了以下想法:)假设doc
是您的HtmlDocument
对象
HtmlNodeCollection links = doc.DocumentNode.SelectNodes("//link[@rel]");
应该为您获取具有rel
属性的链接
元素。现在迭代:
foreach (HtmlNode link in links)
{
string url;
if (link.Attributes["rel"] == "canonical") {
url = link.Attributes["href"];
}
}
此外,还可以在SelectNodes调用中过滤链接,只获取带有“canonical”的链接:doc.DocumentNode.SelectNodes(“//link[@rel='canonical']”)代码>
未测试代码,但您得到的想法是:)接受的答案不再正确,更新的代码如下:
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;
}
}
接受的答案不再正确,更新代码如下:
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;
}
}
//link[@rel='canonical']
不是更容易吗?我正要说,是:)难道//link[@rel='canonical']
不是更容易吗?我正要说,是:)接受的答案有什么问题?它似乎仍然有效?单引号和双引号可能有问题吗?@MossPalmer这是几个月前的事了,但IIRC你现在需要这个值啊,是的。谢谢你澄清这一点。我连看都没看就加上了。在你的回答中可能值得注意。谢谢。我原以为//link[@rel]='canonical'是您标记为错误的部分,但它仍然可以正常工作。canonical=link.GetAttributeValue(“href”,null)怎么样;而不是canonical=link.Attributes[“href”].Value;如果链接属性为空,这将引发异常接受的答案有什么问题?它似乎仍然有效?单引号和双引号可能有问题吗?@MossPalmer这是几个月前的事了,但IIRC你现在需要这个值啊,是的。谢谢你澄清这一点。我连看都没看就加上了。在你的回答中可能值得注意。谢谢。我原以为//link[@rel]='canonical'是您标记为错误的部分,但它仍然可以正常工作。canonical=link.GetAttributeValue(“href”,null)怎么样;而不是canonical=link.Attributes[“href”].Value;如果链接属性为null,则会引发异常