C#HtmlAgilityPack-GetAttributeValue返回错误的布尔值

时间:2019-04-24 06:44:40

标签: c# html-agility-pack

我在使用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

1 个答案:

答案 0 :(得分:1)

这是因为attribute的值是string而不是boolean,而AgilityPack不允许您将string转换为false

通过这种方式,您可以使用Linq表达式而不是GetAttributeValue

if (link.Attributes.Any(x => x.Name.Equals("href")))