Getting Href property with anglesharp linq query

谁说我不能喝 提交于 2019-12-24 13:24:27

问题


I am trying to understand how to use anglesharp.

I made this code based on the example (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);

This works as expected but now I want to access the Href property but I am unable to do this:

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

When I look in the debugger I can see in results view that the HtmlAnchorElement enumerable object has a Href property but I am obviously not trying to access it right.

None of the examples in the documentation show a property being accessed so I guess it's something so simple that doesn't need to be shown but I am not seeing how to do it.

Can anyone show me how I should be accessing a html property with angle sharp?

edit:

This works when I cast it to the correct type

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

How would I write that as a Linq statement like the titles variable?


回答1:


Alternative to har07's answer:

var menuItems = document.QuerySelectorAll(menuSelector).OfType<IHtmlAnchorElement>();



回答2:


You can cast to IHtmlAnchorElement as follow :

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

or using Cast<IHtmlAnchorElement>() :

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


来源:https://stackoverflow.com/questions/37105259/getting-href-property-with-anglesharp-linq-query

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!