2011-10-10 43 views
2

我解析網頁到Windows Phone 7,我需要知道什麼是更好的方法來做到這一點。最重要的是表現。我在example with imdb that the author uses regex中看到過,但我不確定如果使用Html Agility Pack和Linq,它會不會更好。解析有什麼更好的:正則表達式或linq?

P.s .:我必須解析網站,它不是我的網站。

+0

[RegEx match open tags not except XHTML self-contained tags]可能重複(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) –

回答

0

一次偶然的機會,我在一個類似的問題展開工作。我沒有告訴你任何權威性的聲明,因爲它爲時尚早。首先我用了3個引擎:

當然,也有很多更多的選擇(即使我寫了一次簡單的HTML瀏覽器爲Palm OS ),但這似乎是一個好的開始。

Majestic沒有提供Html->文本轉換,只是一個示例代碼如何遍歷html字符串。首先我實現了瑣碎的轉換:

  • 寫的所有文本節點
  • 轉換<p>成 「\ n \ n」 和<BR>爲 「/ N」
  • 無視一切

然後我收集了50個HTML文件的樣本,並使用所有3種方法轉換它們。我不得不說,我對任何一種方法都不滿意。兩個一般觀察:從莊嚴和敏捷

  • 結果極其相似
  • Regex的方法是幅度慢一個數量級。

所以我查看了正則表達式代碼,並在底部發現了一個無意義的循環。簡單優化後,Regex方法只有〜25%的速度慢。鑑於它使30多個複雜的正則表達式替代品,我認爲這是一個很好的結果。

然後我寫了一個測試html文件,其中包含所有常見的html標籤和更多。與之前一樣,Majestic和Agility也表現相似。

  • 所有發動機OK:H1,P,寫成文本標記
  • 所有引擎失敗:H2 +,小時,B
  • BR:正則表達式失敗,大氣磅礴OK
  • 列表:正則表達式行,雄偉壯觀的失敗
  • 簡單的2x2的表:正則表達式確定,大氣磅礴失敗

還有很多更多的測試。例如編碼。

在這一刻,我只會說,正則表達式似乎是一個更好的選擇。但是,所提及的這些發動機都沒有令人滿意的性能。在積極的方面,調整這些引擎(特別是Majestic和Regex)很容易。也許Agility也是如此,但是,我沒有深入探討這個包。

+0

跟進:我決定正則表達式。主要的觀點是它只是一小段代碼,很容易添加到另一個項目中。只是在上面的參考文獻中對原始代碼提出警告。這是緩慢的錯誤,即你需要改進正則表達式使用。 –