2011-09-05 74 views
2

我使用HTML敏捷性包被(儘可能多的建議在這裏)有一段時間,我喜歡它,但我有一些顧慮。淨HTML解析器現在和未來

我正在開發一些新的應用程序,這些應用程序在(X)HTML分析上應該會運行數年,所以我想依賴一個似乎與日常的網絡混亂保持一致的庫。 我這樣說是因爲前段時間我從HAP開發人員那裏看到一篇文章,指出他們在不久的將來會遇到問題,並且應該做些改變,但由於缺乏資源而難以完成。我asked in their Codeplex和它的維護者可能確認他們想要做什麼,他們有多少時間,我完全理解。

看看其他選項,Majestic 12 parser似乎是人們在這裏推薦的另一個很好的選擇...但它的網站快速訪問告訴我們它的最後版本日期爲2008年,現在超過3年。

那麼請問...有誰知道一個良好的.Net HTML解析器似乎有它背後強大的開發,從而能夠適應任何需要以下年?它也必須是開源的。也許我要求太多......但以防萬一。

不要誤解我的意思,我喜歡HAP,我現在對它很滿意,我只是害怕在一段時間內會發生什麼事情,並且在依靠深入持久的東西之前,我更願意探索可用選項。

謝謝!

+3

因此,不要依賴HAP,而要依靠別的東西?如何在沒有水晶球或時間機器的情況下爲這個問題提供答案? –

+4

@R:至少OP不提倡正則表達式。 ;) – TrueWill

+1

@TrueWill,是的,但是他主張黑魔法,這是更糟糕的:-) –

回答

5

我真的不能對未來發表評論,但我可以告訴你關於HTML敏捷性包的一些事實,我熟知:

  • 1.3版是圍繞2000年創建,使用.NET框架1。1(這就是爲什麼這個版本缺乏通用列表和I ENumerable<T>支持順便說一句)。當時,其主要目標是能夠解析真實世界的HTML。 2000年的真實世界的HTML是更多的HTML 3.2,有許多重疊的標籤(如FORM),而不是HTML 4,5或XHTML。這意味着解析器實際上支持今天的標籤湯幾乎比10年前更好。
  • 這意味着,與其他庫不同,它的實現幾乎一無所知...... HTML,除了事實上HTML由元素和屬性組成。例如,它不知道FONT元素。元素(幾乎)不透明,屬性完全不透明。這是什麼使它有點前途證明。
  • 我個人還是今天在.NET 4上使用這個1.3版本。你可以用今天的HTML頁面來完美地使用它。

因此,我不明白未來可能會發生什麼情況可能會破壞這個HTML?

+0

+1。聽到這個來自Html Agility Pack的原作者很高興。 –

+0

謝謝西蒙。正如你所看到的,我對HAP內部知識一無所知,所以我們很高興聽到它的構建方式並不瞭解標籤。那麼,這是否意味着如果例如有一個新的標籤被接受爲標準,HAP會在沒有問題的情況下管理它?非常感謝答案。 –

+1

@Jacobo - 當然,這個過程實際上已經在幾年前用HTML 4和3.2發生了。查看這裏創建的新標籤:http://www.htmlgoodies.com/tutorials/html_401/html4-ref/article.php/3460281/New-Tags-in-HTML-40.htm。在2000年創建的Html Agility Pack 1.3版本對此沒有任何問題。這不是第一級HTML結構的性質發生變化,只是它對用戶代理(瀏覽器)有意義。 Html Agility Pack不是瀏覽器。 –

2

沒有水晶球,所以沒有人可以告訴你使用什麼是相信它會停留很長時間。即使是商業級別的組件也可能會過時並且技術不斷髮生變化,因此所有供應商都應該嘗試適應和發展,有時甚至有些失敗或者落後於其他。

我認爲你可以做的最好的事情之一是儘可能多地抽象和封裝HAP的用法,包裝類或分離層,以便在將來或即使採用另一個解析器,你的應用程序的大部分將保持不變,你將只有少數組件的本地化變化。

如果你有良好的單元測試覆蓋率你也會感到舒適與更換,因爲你的解決方案將能夠證明你的穩定性和正確性。

我們使用這種方法對許多組件,日誌框架,網格組件,數學庫等,每當生態系統變化,如果這樣做,我們有一大堆的變化都侷限於只有少數地方。

+0

當然,你所說的是一個很好的建議,我已經嘗試採用。但是,這並不意味着在這樣的層次上進行重構是一件痛苦的事情,並且非常耗時;儘管如果你的代碼結構合理,這是一個不太痛苦的代碼。謝謝。 –

1

隨着119,783個下載和835個項目,我不得不認爲有人將繼續推動HTML Agility Pack向前發展以跟上標準。如果我們相信來自開源軟件的所有好處,我們應該能夠相信改進軟件可以是一個協作努力。

當然這是很難預測未來,但我選擇了HTML敏捷包最近的一個項目的全面普及,只是因爲(和每個人似乎都推薦它)。到目前爲止,這是一個愉快的經歷。