1

我正在构建一个应用程序来从网站中提取新闻项目,但是无法让它找到带有 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);
    }

}
4

2 回答 2

0

在使用 HtmlAgilityPack 时,我更喜欢使用 LINQ。在这种情况下,您的选择将如下所示:

IEnumerable<HtmlNode> nodes = document.DocumentNode.Descendants("dd");
于 2012-06-30T03:33:41.327 回答
0

这是根据此线程的正确方法:

如何解析这些标签?

为确保它正常工作,请执行以下操作:

var node = document.DocumentNode.SelectSingleNode("//[dt='Department:']");

dt它至少应该拿起第一个。如果不是,那么您的 HTML 标记一定有问题,解析器会感到困惑!:)

另一件事要尝试...将 HTML 复制/粘贴到一个简单的 HTML 文件中并提供您的代码。

替换这一行(单引号之间的表格):

<dl class='table'>

用这个(双引号之间的表):

<dl class="table">

如果上述方法仍然不起作用,请尝试在关闭每个<\dt>标签之前删除冒号 ( : )。这样做是为了找出导致问题的原因。

于 2012-06-29T12:21:00.303 回答