如何将 HTML 读取为 XML?
我想从从互联网下载的 html 页面中提取几个链接,我认为使用 linq to XML 对于我的情况来说是一个很好的解决方案。
我的问题是我无法从 HTML 创建 XmlDocument,使用 Load(string 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;
}
当我尝试使用 LoadXml(string xml) 加载该字符串时,我得到异常
'--' is an unexpected token. The expected token is '>'
我应该采取什么方式将html文件读取为可解析的XML
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
HTML 与 XML 根本不同(除非 HTML 实际上恰好符合 XML 模式中的 XHTML 或 HTML5)。最好的方法是使用 HTML 解析器 来读取 HTML。然后,您可以将其转换为 Linq to XML – 或直接处理它。
HTML simply isn’t the same as XML (unless the HTML actually happens to be conforming XHTML or HTML5 in XML mode). The best way is to use a HTML parser to read the HTML. Afterwards you may transform it to Linq to XML – or process it directly.
我自己没有使用过它,但我建议你看一下 SgmlReader。这是他们主页的示例:
I haven't used it myself, but I suggest you take a look at SgmlReader. Here's a sample from their home page:
如果您想从页面中提取一些链接,正如您所提到的,请尝试使用 HTML 敏捷包。
此代码从网络获取页面并提取所有链接:
从磁盘打开一个 html 文件并获取特定链接的 URL:
If you want to extract some links from a page, as you mentioned, try using HTML Agility Pack.
This code gets a page from the web and extracts all links:
Open an html file from disk and get URL for specific link:
HTML 不是 XML。 HTML 基于 SGML,因此不能确保标记是格式良好的 XML(XML 是 SGML 本身的子集)。您只能将 XHTML(即 XML 兼容的 HTML)解析为 XML。但当然,大多数网站的情况并非如此。
要使用 HTML,您需要使用 HTML 解析器。
HTML is not XML. HTML is based on SGML, and as such does not ensure that the markup is well-formed XML (XML is a subset of SGML itself). You can only parse XHTML, i.e. XML compatible HTML, as XML. But of course that is not the case for most of the websites.
To work with HTML, you need to use a HTML parser.
如果您知道您感兴趣的节点,我将使用正则表达式从字符串中提取链接。
If you know the nodes you're interested in I would use regex to extract the links from the string.