解析 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 字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用angularJS解析ng-bind中的html [重复]