0

HTMLドキュメントを解析し、各段落を個別のエントリとしてログファイルに出力したいと思います。これまでのところ:

let parseTextFile (path) =
        let fileText = File.ReadAllText(path)
        fileText.Split('<p>') |> Seq.iter (fun m -> logEmail(m))

しかし、残念ながら私にとってはstring.Splitはここで必要なことを実行しません。文字列を単一の文字区切り文字で分割するために、存在しているようです。1文字以上のものを使用してファイルを分割するにはどうすればよいですか。段落の最後に</p>があるので、<p>以外のものがあると便利な場合があります。正規表現またはある種の複雑なマッチャーを使用すると、<p>タグ間のすべてをより具体的に選択できます。

4

2 に答える 2

4

HtmlAgilityPackなど、htmlの解析に特定のライブラリを使用してみてください。

于 2013-02-24T13:27:12.053 に答える
1

.Split()wmeyerが言ったように、文字列に対してメソッドの別のオーバーロードを使用する必要があります。実際、投稿したコード'<p>'は文字列リテラルではないためコンパイルすらできません。代わりに使用する必要があります"<p>"(一重引用符は文字リテラル用です)。

正しいオーバーロードを使用する方法は次の.Split()とおりです。

open System.IO

let parseTextFile path =
    let fileText = File.ReadAllText path
    fileText.Split ([| "<p>"; |], System.StringSplitOptions.RemoveEmptyEntries)
    |> Seq.iter logEmail

F#Interactiveでの簡単なテストの場合:

> "First paragraph<p>Second paragraph.<p><p>Third paragraph.<p>"
   .Split ([| "<p>"; |], System.StringSplitOptions.RemoveEmptyEntries);;
val it : string [] =
  [|"First paragraph"; "Second paragraph."; "Third paragraph."|]

最後に、@ ntrが言ったように、HTMLを解析するためにHTMLAgilityPackのようなライブラリを使用する方がはるかに優れています。彼らのパーサーは非常に堅牢で、多くのトラブルを回避します。

于 2013-02-24T15:25:38.303 に答える