解析 HTML 字符串 [重复]

Posted

技术标签:

【中文标题】解析 HTML 字符串 [重复]【英文标题】:Parsing HTML String [duplicate] 【发布时间】:2011-07-03 14:04:01 【问题描述】:

有没有办法像 DOM 解析一样在 .Net 代码中解析 html 字符串...

即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 中加载它 【参考方案1】:

您可以使用优秀的HTML Agility Pack。

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

【讨论】:

dangit oded - 我刚刚发布了同样的内容,只是我很慢,你是速度守护神! :) +1 来自我。 @Downvoter - 想发表评论吗?【参考方案2】:

看看使用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);
 

【讨论】:

xpath 字符串应该是 "//a[@href]" ?【参考方案3】:

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

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

【讨论】:

该链接已过时。他们搬到了html-agility-pack.net/?z=codeplex【参考方案4】:

我使用HTML Agility Pack 来做这件事,我认为这很棒。这对我真的很有帮助。

【讨论】:

该链接已过时。他们搬到了html-agility-pack.net/?z=codeplex【参考方案5】:

也许这会有所帮助:What is the best way to parse html in C#?

【讨论】:

以上是关于解析 HTML 字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

HTML解析以获得我想要的[重复]

使用angularJS解析ng-bind中的html [重复]

Python将'True'和'False'解析为字符串[重复]

php解析xml字符串[重复]

Java解析字符串[重复]

Dart 解析字符串包含地图列表 [重复]