Я совершенно новый для F #, поэтому прошу прощения, если я использую неправильные имена для вещей.Использование Pipe Forward с вложенными последовательностями
Я пытаюсь использовать 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">
И теперь я пытаюсь получить список всех ссылок на странице. Мой мыслительный процесс был:
- Получить все внешние дивы по имени класса
- Получить потомки всех этих дивы
- Сбор этих потомков в виде плоского списка
- Фильтр этот список вниз только
<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
функции так, как я пытаюсь здесь? Думаю ли я об этом неправильно?
Вау, это неловко. :) Благодаря! – JoshVarty