Получение свойства Href с запросом angularsharp linq

Я пытаюсь понять, как использовать angularsharp.

Я сделал этот код на основе примера (https://github.com/AngleSharp/AngleSharp):

        // Setup the configuration to support document loading
        var config = Configuration.Default.WithDefaultLoader();
        // Load the names of all The Big Bang Theory episodes from Wikipedia
        var address = "http://store.scramblestuff.com/";
        // Asynchronously get the document in a new context using the configuration
        var document = await BrowsingContext.New(config).OpenAsync(address);
        // This CSS selector gets the desired content
        var menuSelector = "#storeleft a";
        // Perform the query to get all cells with the content
        var menuItems = document.QuerySelectorAll(menuSelector);
        // We are only interested in the text - select it with LINQ
        var titles = menuItems.Select(m => m.TextContent).ToList();

        var output = string.Join("\n", titles);

        Console.WriteLine(output);

Это работает, как и ожидалось, но теперь я хочу получить доступ к свойству Href, но не могу этого сделать:

var links = menuItems.Select(m => m.Href).ToList();

Когда я смотрю в отладчике, я вижу в представлении результатов, что перечисляемый объект HtmlAnchorElement имеет свойство Href, но я, очевидно, не пытаюсь получить к нему правильный доступ.

Ни один из примеров в документации не показывает доступ к свойству, поэтому я думаю, что это что-то настолько простое, что его не нужно показывать, но я не вижу, как это сделать.

Может ли кто-нибудь показать мне, как я должен получить доступ к свойству html с острым углом?

редактировать:

Это работает, когда я привожу его к правильному типу

foreach (IHtmlAnchorElement menuLink in menuItems)
        {
            Console.WriteLine(menuLink.Href.ToString());
        }

Как бы я написал это как оператор Linq, например переменную titles?


person Guerrilla    schedule 08.05.2016    source источник


Ответы (3)


Альтернатива ответу har07:

var menuItems = document.QuerySelectorAll(menuSelector).OfType<IHtmlAnchorElement>();
person tofi9    schedule 09.05.2016

Вы можете привести к IHtmlAnchorElement следующим образом:

var links = menuItems.Select(m => ((IHtmlAnchorElement)m).Href).ToList();

или используя Cast<IHtmlAnchorElement>() :

var links = menuItems.Cast<IHtmlAnchorElement>()
                     .Select(m => m.Href)
                     .ToList();
person har07    schedule 09.05.2016

я немного опоздал к этой теме, но вы можете использовать

string link = menuItem.GetAttribute("href");

или это, если это список элементов

List<string> menuItems = LinkList.Select(item => item.GetAttribute("href")) .ToList();
person IntegratedHen    schedule 01.08.2020