解析 HTML 字符串

14

有没有一种方法可以在.NET代码后台中解析HTML字符串,就像DOM解析一样...

例如:GetElementByTagName("abc").GetElementByTagName("tag")

我有这段代码片段...

private void LoadProfilePage()
{        
    string sURL;
    sURL = "http://www.abcd1234.com/abcd1234";

    WebRequest wrGETURL;
    wrGETURL = WebRequest.Create(sURL);

    //WebProxy myProxy = new WebProxy("myproxy",80);
    //myProxy.BypassProxyOnLocal = true;

    //wrGETURL.Proxy = WebProxy.GetDefaultProxy();

    Stream objStream;
    objStream = wrGETURL.GetResponse().GetResponseStream();

    if (objStream != null)
    {
        StreamReader objReader = new StreamReader(objStream);

        string sLine = objReader.ReadToEnd();

        if (String.IsNullOrEmpty(sLine) == false)
        {
            ....                   
        }
    }
}

如果它是有效的XHTML,也许你可以在System.Xml.XDocument中加载它。 - Bazzz
5个回答

12
您可以使用出色的HTML Agility Pack工具。

这是一个敏捷的HTML解析器,构建了一个读/写文档对象模型(DOM)并支持纯XPATH或XSLT(您实际上不必理解XPATH和XSLT就可以使用它,不用担心...)。它是一个.NET代码库,允许您解析“来自网络”的HTML文件。解析器对于“现实世界”中的畸形HTML非常宽容。该对象模型与System.Xml提供的非常相似,但适用于HTML文档(或流)。


真糟糕,oded - 我刚刚发布了同样的内容,只是我比你慢,你是速度恶魔! :) 我给你加1。 - phillip
@Downvoter - 有什么评论吗? - Oded

10

可以尝试使用 Html Agility Pack

以下是使用示例:

 HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm");
 foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]")
 {
    HtmlAttribute att = link["href"];
    att.Value = FixLink(att);
 }

1
xpath 字符串应该是 "//a[@href]" 吗? - Joachim Chapman

3
您可以使用HTML Agility Pack和一点XPath(它甚至可以为您下载文档):

你可以使用HTML Agility Pack和一些XPath(它甚至可以为你下载文档):

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("http://www.abcd1234.com/abcd1234");
HtmlNodeCollection tags = doc.DocumentNode.SelectNodes("//abc//tag");

那个链接已经过时了。他们已经迁移到http://html-agility-pack.net/?z=codeplex。 - William Herrmann

2
我曾使用过 HTML Agility Pack 来完成这个任务,我认为它非常好用。它对我非常有帮助。

该链接已过时。他们已经迁移到http://html-agility-pack.net/?z=codeplex。 - William Herrmann

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接