Я новичок в F #, поэтому прошу прощения, если использую неправильные имена для вещей.
Я пытаюсь использовать F # для анализа веб-страницы, которая выглядит примерно так:
<!--This is simplified, in reality there are more divs, anchors etc. -->
<html>
<body>
<div class="pr-single"><a href="http://google.ca">Google</a></div>
<div class="pr-single"><a href="http://apple.com">Apple</a></div>
<div class="pr-single"><a href="http://microsoft.com">Microsoft</a></div>
</body>
</html>
Я объявил тип
type PromoterPage = FSharp.Data.HtmlProvider<"http://somewebpage.com">
А теперь пытаюсь получить список всех ссылок на странице. Мой мыслительный процесс заключался в следующем:
- Получить все внешние div по имени класса
- Получите потомков всех этих div
- Соберите этих потомков в плоский список
- Отфильтруйте этот список только до
<a>
тегов
Моя попытка приведена ниже:
let GetFirst (page:PromoterPage) =
page.Html.Descendants()
|> Seq.filter(fun n -> n.HasClass("pr-single")) //Find the divs
|> Seq.map(fun n -> n.Descendants()) //Get the descendants
|> Seq.collect(fun n -> n |> Seq.where(fun m -> m.HasName("a")) //Filter and collect the anchors
Проблема, похоже, в том, что вы не можете вкладывать Seq
функции или что я делаю это неправильно. Я получаю сообщение об ошибке:
Incomplete values or function definition. If this is an expression, the body of the expression must be indented to the same column as the keyword.
Могу ли я вложить Seq
функции так, как я пытаюсь это сделать? Я неправильно об этом думаю?