2009-02-12 19 views
20

我有一個C#WPF應用程序需要使用作爲HTML表格公開在網頁上的數據。C#有沒有LINQ到HTML或其他一些好的.Net HTML操作API?

After getting inspiration from this url我嘗試使用Linq to Xml來解析Html文檔,但這隻適用於HTML文檔構建得非常好(並且內部沒有任何註釋或HTML實體)的情況。我已經設法使用這種技術獲得了一個可行的解決方案,但它遠非理想。

我在解析HTML的解決方案。我之前曾經攻擊過「解決方案」,但它們很脆弱。我是在解析/操縱文檔的強大方式之後。理想情況下,我喜歡使任務像Javascript/JQuery一樣簡單。

有沒有人知道一個很好的.Net庫或實用工具來解析/操作HTML?

+0

過得好的HTML?通過網頁瀏覽器控件,或通過HttpRequest,或...? – 2009-02-12 16:51:55

+0

嗨,我通過HttpRequest獲取HTML。 – 2009-02-12 16:57:10

回答

12

儘管它不是LINQ基礎,我建議研究從CodePlex上HTML Agility Pack

注:HTML敏捷性包現在支持LINQ到對象(通過LINQ到XML一樣的界面)

從HTML敏捷性包頁:

這是一個靈活的HTML解析器,構建一個讀/寫DOM並且支持普通的XPATH或者XSLT(你實際上不需要理解XPATH或者XSLT來使用它,不用擔心...)。它是一個.NET代碼庫,允許您解析「離開網頁」的HTML文件。解析器對「真實世界」格式錯誤的HTML非常寬容。對象模型與提出System.Xml非常相似,但是對於HTML文檔(或流)。

2

HTML很少形成良好,您可以可靠地使用LINQ to XML。它可能是,你可能會發現一個HTML「更清潔」,可以很好地修復格式,可以閱讀,但沒有告訴它會是多麼強大。

我認爲這是一個從您無法控制的HTML表格中讀取的「屏幕掃描器」。在這種情況下,不要強調健壯性,屏幕抓取本質上是脆弱的。如果你的要求是固定的,那麼設計一個刮板就可以很容易地更新,如果/當你刮的HTML改變了。

2

我不得不在最近的項目中這樣做,我使用LINQ to XML。如果你知道它始終是乾淨的XHTML,那麼你可以很容易遞歸地複製DOM,但是我使用DevComponents HTMLDocument類庫(http://www.devcomponents.com/htmldoc/)將HTML轉換爲XML,然後將其轉換爲XElement。這可以減少將您的HTML轉換爲XElement層次結構的難題。一個警告是它腳本元素扼殺,所以我通過蠻力刪除這些。

/// <summary> 
    /// Extracts an HtmlDocument DOM to an XElement DOM that can be queried using LINQ to XML. 
    /// </summary> 
    /// <param name="htmlDocument">HtmlDocument containing DOM of page to extract.</param> 
    /// <returns>HTML content as <see cref="XElement" /> for consumption by LINQ to XML.</returns> 
    public XElement ExtractXml(HtmlDocument htmlDocument) { 
     XmlDocument xmlDoc = htmlDocument.ToXMLDocument(); 

     // Find and remove all script tags from XML DOM or LINQ to XML will choke on XElement.Parse(XmlDocument). 
     IList<XmlNode> nodes = new List<XmlNode>(); 
     foreach (XmlNode node in xmlDoc.GetElementsByTagName("script")) 
      nodes.Add(node); 
     foreach (XmlNode node in nodes) 
      node.ParentNode.RemoveChild(node); 

     return XElement.Parse(xmlDoc.OuterXml); 
    } 
相關問題