Ziv*_*Ziv 11 html c# xml html-parsing
我想从互联网下载的html页面中提取几个链接,我认为使用linq到XML对我的情况来说是一个很好的解决方案.
我的问题是我无法从HTML创建XmlDocument,使用Load(字符串url)不起作用所以我使用以下命令将html下载到字符串:
public static string readHTML(string url)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
string html = sr.ReadToEnd();
sr.Close();
return html;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用LoadXml(字符串xml)加载该字符串时,我得到了异常
'--' is an unexpected token. The expected token is '>'
Run Code Online (Sandbox Code Playgroud)
我应该采用什么方式将html文件读取为可解析的XML
Dan*_*bić 10
我自己没有用过,但我建议你看一下SGMLReader.以下是他们主页的示例:
XmlDocument FromHtml(TextReader reader) {
// setup SgmlReader
Sgml.SgmlReader sgmlReader = new Sgml.SgmlReader();
sgmlReader.DocType = "HTML";
sgmlReader.WhitespaceHandling = WhitespaceHandling.All;
sgmlReader.CaseFolding = Sgml.CaseFolding.ToLower;
sgmlReader.InputStream = reader;
// create document
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.XmlResolver = null;
doc.Load(sgmlReader);
return doc;
}
Run Code Online (Sandbox Code Playgroud)
如果您想从页面中提取一些链接,正如您所提到的,请尝试使用HTML Agility Pack。
此代码从网络获取页面并提取所有链接:
HtmlWeb web = new HtmlWeb();
HtmlDocument document = web.Load("http://www.stackoverflow.com");
HtmlNode[] links = document.DocumentNode.SelectNodes("//a").ToArray();
Run Code Online (Sandbox Code Playgroud)
从磁盘打开一个 html 文件并获取特定链接的 URL:
HtmlDocument document2 = new HtmlDocument();
document2.Load(@"C:\Temp\page.html")
HtmlNode link = document2.DocumentNode.SelectSingleNode("//a[@id='myLink']");
Console.WriteLine(link.Attributes["href"].Value);
Run Code Online (Sandbox Code Playgroud)