3

アングルシャープの使い方を理解しようとしています。

例 ( 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());
        }

titles 変数のような Linq ステートメントとしてどのように記述すればよいでしょうか?

4

3 に答える 3

6

har07の答えの代替:

var menuItems = document.QuerySelectorAll(menuSelector).OfType<IHtmlAnchorElement>();
于 2016-05-09T01:04:25.993 に答える
3

次のようにキャストできIHtmlAnchorElementます。

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

または使用Cast<IHtmlAnchorElement>()

var links = menuItems.Cast<IHtmlAnchorElement>()
                     .Select(m => m.Href)
                     .ToList();
于 2016-05-09T00:06:47.927 に答える