我在使用HtmlAgilityPack和GetAttributeValue方法时遇到了麻烦。
在下面的代码中,我期望对“ href”的GetAttributeValue测试仅在没有属性的html元素上失败,但是,在所有元素上都返回false。
using System;
using HtmlAgilityPack;
public class Program
{
public static void Main()
{
var html = @"<!DOCTYPE html>
<html>
<body>
<a href=""http://www.google.com"" title=""Google"" />
<a id=""someotherlink"" title=""Some Other Title"" />
</body>
</html> ";
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
var node = htmlDoc.DocumentNode.SelectNodes("//a");
foreach (var link in node)
{
if (link.HasAttributes)
{
Console.WriteLine(link.OuterHtml);
if (link.GetAttributeValue("href", false))
{
Console.WriteLine("\t" + link.Attributes["href"].Value);
}
else
{
Console.WriteLine("\tThis link don't have a href dude");
}
}
}
}
}
doco指出,只有在未找到GetAttributeValue值时,它才应返回false值。奇怪的是,如果我使用string,string签名,它可以正常工作。
Doco at https://docs.workflowgen.com/wfgmy/v400/html/211ece6d-1ae3-7c29-b86f-e908e4766d4c.htm
答案 0 :(得分:1)
这是因为attribute的值是string
而不是boolean
,而AgilityPack
不允许您将string
转换为false
。
通过这种方式,您可以使用Linq表达式而不是GetAttributeValue
if (link.Attributes.Any(x => x.Name.Equals("href")))