2013-02-24 4 views
0

HTML 문서를 구문 분석하고 각각의 단락을 로그 파일에 개별 항목으로 인쇄하고 싶습니다. 지금까지 내가 가지고 :f # split html by tags

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

을하지만 불행하게도 나를 위해 사항 String.split 내가 여기 싶은 일을하지 않고, 단일 문자 구분 기호로 문자열을 분할하기 위해 존재하는 것 같다. 어떻게 하나의 문자 이상을 사용하여 파일을 분할 할 수 있습니까? 단락 끝에 </p>을 가질 것이기 때문에 단지 < p> 이상의 것을 갖는 것이 좋을 수도 있습니다. regex 또는 복잡한 일종의 일종으로 나는 더 구체적으로 < p> 태그 사이의 모든 것을 골라 낼 수있었습니다.

+0

이 오버로드를 살펴보십시오. http://msdn.microsoft.com/en-us/library/tabh47cf.aspx – wmeyer

답변

1

wmeyer가 말했듯이 문자열에 .Split() 메서드의 다른 오버로드를 사용해야합니다. 실제로 '<p>'은 문자열 리터럴이 아니기 때문에 코드를 컴파일하지 않습니다. 대신 "<p>"을 사용해야합니다 (작은 따옴표는 문자 리터럴 용입니다). F # 대화의 빠른 테스트를 위해

open System.IO 

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

:

여기 .Split()의 올바른 오버로드를 사용하는 방법은 @ntr 말했듯이,

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

마지막으로 - 당신은 많이 있어 많이 HTML 분석을위한 HTML 민첩성 팩과 같은 라이브러리를 사용하는 것이 더 좋습니다. 파서는 매우 견고하며 많은 문제를 해결할 것입니다.

5

예 : HtmlAgilityPack과 같이 html 구문 분석을위한 특정 라이브러리를 사용해보십시오.