C#是否有LINQ to HTML或其他一些好的.Net HTML操作API?

C#是否有LINQ to HTML或其他一些好的.Net HTML操作API?,c#,.net,linq,C#,.net,Linq,我有一个C#WPF应用程序,它需要使用在网页上作为HTML表公开的数据 我尝试使用LINQtoXML解析Html文档,但这仅在Html文档格式非常好(并且没有任何注释或Html实体)的情况下才有效。我已经设法用这种技术得到了一个有效的解决方案,但它离理想还很远 我正在寻找一个用于解析HTML的解决方案。我以前曾破解过“解决方案”,但它们很脆弱。我正在寻找一种强大的解析/操作文档的方法。理想情况下,我希望能够像Javascript/JQuery一样轻松地完成任务 有谁知道一个好的.Net库或实用程

我有一个C#WPF应用程序,它需要使用在网页上作为HTML表公开的数据

我尝试使用LINQtoXML解析Html文档,但这仅在Html文档格式非常好(并且没有任何注释或Html实体)的情况下才有效。我已经设法用这种技术得到了一个有效的解决方案,但它离理想还很远

我正在寻找一个用于解析HTML的解决方案。我以前曾破解过“解决方案”,但它们很脆弱。我正在寻找一种强大的解析/操作文档的方法。理想情况下,我希望能够像Javascript/JQuery一样轻松地完成任务


有谁知道一个好的.Net库或实用程序可以解析/操作HTML吗?

HTML的格式很少好到可以可靠地使用LINQ to XML。可以想象,您可能会发现一个HTML“清理器”,它可以很好地修复格式以供阅读,但目前还不知道它会有多强大


我假设这是一个“screenscraper”,它从一个您无法控制的HTML表中读取。在这种情况下,不要过分强调坚固性,刮网本身就是脆弱的。如果您的需求是一成不变的,那么设计刮板,使其在您正在刮取的HTML发生更改时能够轻松更新。

我在最近的一个项目中不得不这样做,并且我使用了LINQ to XML。如果您知道它总是干净的XHTML,那么您可能很容易递归地复制DOM,但是我使用DevComponents HTMLDocument类库()将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);
    }
//
///将HtmlDocument DOM提取到可以使用LINQ to XML查询的XElement DOM。
/// 
///包含要提取的页面的DOM的HtmlDocument。
///供LINQ转换为XML使用的HTML内容。
公共XElement提取XML(HtmlDocument HtmlDocument){
XmlDocument xmlDoc=htmlDocument.ToXMLDocument();
//在XElement.Parse(XmlDocument)上查找并删除XMLDOM或LINQ到XML的所有脚本标记。
IList节点=新列表();
foreach(xmlDoc.GetElementsByTagName(“脚本”)中的XmlNode节点)
nodes.Add(node);
foreach(节点中的XmlNode节点)
node.ParentNode.RemoveChild(节点);
返回XElement.Parse(xmlDoc.OuterXml);
}
尽管它不是基于LINQ的,但我建议研究CodePlex中的

注意:Html Agility Pack现在支持Linq到对象(通过类似Linq到Xml的接口)

从HTML Agility Pack页面:

这是一个敏捷的HTML解析器,它构建读/写DOM并支持纯XPATH或XSLT(您实际上不必理解XPATH或XSLT就可以使用它,不用担心……)。它是一个.NET代码库,允许您解析“web外”HTML文件。解析器对“真实世界”格式错误的HTML非常宽容。对象模型与System.Xml非常相似,但适用于HTML文档(或流)


我在这里发布了一些提供“LINQ到HTML”功能的代码:


这里有一个LINQ到HTML库:


您是如何获得html的?通过webbrowser控件,或通过HttpRequest,或…?嗨,我通过HttpRequest获得HTML。你成功使用过这个产品吗?复杂的许可证意味着什么?是的,我使用这个库已有几年了,效果很好。我强烈推荐给任何人。它还包含一个Nuget包,非常有用。