2011年10月30日

[C#] - HTML轉成XML做Xpath

最近有一個需求是要做HTML的資料擷取,在以前是使用字串處理在運作,

後來運用正規式(Regular Expression)做分析擷取,不過有一個缺點就是維護不容易,

當原本要擷取的網頁異動時,便要全部重寫維護成本太高,

最近看了網路上的文章有人使用Xpath,才想到可以透過XML的特性去做分析擷取,

維護上也比較容易,不過要自己寫一個轉換的模組有些花時間,


既然自己想的到,浩瀚的網路一定有人做,

找了好幾款如:Html Agility PackHtml2XhtmlTidyMarkupConverter

不過效果都不盡理想,就要放棄的時候...出現曙光SGMLReader

這是今天要介紹的,使用很簡單,

如下程式碼所示:
XmlDocument FromHtml(TextReader reader) {

    // setup SGMLReader
    Sgml.SgmlReader sgmlReader = new Sgml.SgmlReader();
    sgmlReader.DocType = "HTML";
    sgmlReader.WhitespaceHandling = WhitespaceHandling.All;
    sgmlReader.CaseFolding = Sgml.CaseFolding.ToLower;
    sgmlReader.InputStream = reader;

    // create document
    XmlDocument doc = new XmlDocument();
    doc.PreserveWhitespace = true;
    doc.XmlResolver = null;
    doc.Load(sgmlReader);
    return doc;
}


看一下做了Sample抓出來的資料,如下圖












若真的想要自己做一個Dom的分析的話,可以參考Kelp的作品C# 分析 HTML 資料 - Mana Html Parser
P.S.文章轉載請附上出處
</br>
2011.10.29 By YC

沒有留言:

張貼留言