C # HtmlAgilityPack - GetAttributeValue возвращает ложную ошибку - PullRequest
0 голосов
/ 24 апреля 2019

У меня проблемы с HtmlAgilityPack и методом GetAttributeValue.

В приведенном ниже коде я ожидаю, что мой тест GetAttributeValue для "href" не будет выполнен только для элемента 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");
                }
            }
        }
    }
}

Документ утверждает, что GetAttributeValue должен возвращать ложное значение только тогда, когда значение не найдено. Как ни странно, если я использую строку, подпись строки, она работает нормально.

Доку на https://docs.workflowgen.com/wfgmy/v400/html/211ece6d-1ae3-7c29-b86f-e908e4766d4c.htm

1 Ответ

1 голос
/ 24 апреля 2019

Это потому, что значение атрибута string не boolean и AgilityPack не позволит вам преобразовать это string в false.

Кстати, вы можете использоватьВыражение Linq вместо GetAttributeValue

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