我想在我的C#程序中解析一个网站的超文本标记语言。
首先,我使用XML将SGMLReader转换成XML.为此,我使用以下方法:
XmlDocument FromHtml(TextReader reader)
{
// setup SGMLReader
Sgml.SgmlReader sgmlReader = new Sgml.SgmlReader();
sgmlReader.DocType = "HTML";
sgmlReader.WhitespaceHandling = WhitespaceHandling.None;
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;
}接下来,我阅读了一个网站并尝试查找header节点:
var client = new WebClient();
var xmlDoc = FromHtml(new StringReader(client.DownloadString(@"http://www.switchonthecode.com")));
var result = xmlDoc.DocumentElement.SelectNodes("head");但是,此查询给出的结果为空(count == 0)。但是当我查看xmlDoc.DocumentElement的results视图时,我看到了以下内容:

你知道为什么没有结果吗?请注意,当我尝试另一个网站时,如http://www.google.com,它可以工作。
发布于 2011-08-29 21:23:45
您需要显式选择使用名称空间,请参阅此question。
XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable);
manager.AddNamespace("ns", "http://www.w3.org/1999/xhtml");
doc.DocumentElement.SelectNodes("ns:head", manager);发布于 2011-08-29 21:22:33
您可以改用HTML Agility Pack。它是一个开源的HTML解析器
https://stackoverflow.com/questions/7230627
复制相似问题