В HtmlNodeExtensions
есть метод расширения, который предоставляет методы, которые вы обычно используете для обхода дерева. Для вашего конкретного случая использования есть HtmlNodeExtensions.DirectInnerText(n)
.
Хотя для прохождения теста вам понадобится разделенный пробелами внутренний текст, который гораздо эффективнее выполняется с помощью String.Join
.
let getContentsFromHtmlDocument (doc: HtmlDocument) =
let getInner (node: HtmlNode): string =
node.DirectInnerText()
let result =
doc.Descendants ["h1"; "p"; "a"]
|> Seq.map getInner
|> fun all -> String.Join(" ", all)
result
Все еще существует вопрос:
<p>What is going on? <a href="http://example.com">This is a link</a>.</p>
Это будет объединяться с:
What is going on? . This is a link
в отличие от What is going on? This is a link.
, который не может быть обработан с вашей текущей структурой.