XPath没有拿起dd标签

时间:2012-06-29 12:13:42

标签: c# xpath html-agility-pack

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

}

2 个答案:

答案 0 :(得分:0)

根据这个帖子,这是正确的方法:

How to parse these tags?

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

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");