即使我想使用HtmlAglityPack解析HTML字符串,我还会使用HtmlDocument吗?

时间:2009-07-07 15:29:25

标签: c# html parsing

我在C#工作。我正在尝试从HTML字符串中提取img标记的第一个实例(实际上是一个帖子数据)。

这是我的代码:

 private string GrabImage(string htmlContent)
 {
    String firstImage;

    HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
    htmlDoc.LoadHtml(htmlContent);
    HtmlAgilityPack.HtmlNode imageNode = htmlDoc.DocumentNode.SelectSingleNode("//img");
    if (imageNode != null)
    {
        return firstImage = imageNode.ToString();          
    }
    else
        return firstImage=" ";
}     

但是在htmlDoc中它变为null,即使我试图从字符串中解析HTML,我也会使用HtmlDocument类型吗?

P.S顺便说一下从HTML字符串中抓取第一个图像标签的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

使用您提供的HTML,我制作了这个控制台应用程序。

    static void Main(string[] args)
    {         

        var image = GrabImage("<h2>How to learn Photoshop</h2><p> Its <a href=\"/mysite.aspx\">link</a></p><br /> <img src=\"image.jpg\" alt=\"image\"/>");
        Console.WriteLine(image);
        Console.ReadLine();
    }

    private static string GrabImage(string htmlContent)
    {
        String firstImage;

        HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
        htmlDoc.LoadHtml(htmlContent);
        HtmlAgilityPack.HtmlNode imageNode = htmlDoc.DocumentNode.SelectSingleNode("//img");
        if (imageNode != null)
        {
            firstImage = imageNode.OuterHtml.ToString();
        }
        else
            firstImage = " ";
        return firstImage;
    }

我无法找到你所描述的问题。你能说明你调用GrabImage方法的位置吗?

答案 1 :(得分:0)

对于P.S.另外,您需要确保返回imageNode的html文本,而不是对象的名称。

当我在拥有敏捷包的计算机上时,我会尝试为该文档添加一个额外的部分。