我正在构建一个应用程序来从网站中提取新闻项但却无法找到带有dd标记的节点
关于我哪里出错的任何想法?
HTML
<h1>INFO: New Prices</h1>
<dl class='table'>
<dt>Department:</dt><dd>Sales</dd>
<dt>Start Date:</dt><dd>28/06/2012</dd>
<dt>End Date:</dt><dd>20/07/2012</dd>
<dt>Approved Date:</dt><dd>Jun 28 2012 3:11PM</dd>
</dl>
C#代码
public void CollectNewsItem(UInt64 aSID)
{
String URL = WebReader.storyLink + "?SID=" + aSID;
HtmlWeb hw = new HtmlWeb();
HtmlDocument document = hw.Load(URL);
HtmlNode n = document.DocumentNode.SelectSingleNode("//h1");
Console.WriteLine("Title: " + n.InnerText);
HtmlNodeCollection nodes = document.DocumentNode.SelectNodes("//dd");
foreach (HtmlNode node in nodes)
{
Console.WriteLine(node.InnerText);
}
}
答案 0 :(得分:0)
根据这个帖子,这是正确的方法:
为了确保它正常工作,请执行以下操作:
var node = document.DocumentNode.SelectSingleNode("//[dt='Department:']");
它应该至少拿起第一个dt
。如果没有,那么你的HTML标记中肯定存在问题并且解析器会变得混乱! :)
尝试另一件事...将HTML复制/粘贴到一个简单的HTML文件中并提供代码。
替换此行(单引号之间的表格):
<dl class='table'>
这个(双引号之间的表格):
<dl class="table">
如果仍然无法解决问题,请在关闭每个<\dt>
代码之前尝试删除冒号(:)。这样做可以解决造成问题的原因。
答案 1 :(得分:0)
在使用HtmlAgilityPack时,我更喜欢使用LINQ。在这种情况下,您的选择将如下所示:
IEnumerable<HtmlNode> nodes = document.DocumentNode.Descendants("dd");