我要使用HtmlAgilityPack解析HTML字符串,是否仍需使用HtmlDocument?

4

我正在使用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字符串中获取第一个图像标签的正确方法吗?


请说明您正在使用的编程语言。 - Greg
你能给一个传递进来的htmlContent的例子吗? - Jeremy Stein
谢谢Greg,我刚刚更新了问题。我正在使用C#。 - skhan
Jeremy,这是我的htmlContent示例:<h2>如何学习Photoshop</h2><p>它的<a href=&quot;/mysite.aspx&quot;>链接</a></p><br /> <img src="image.jpg" alt="图片"/>......... - skhan
2个回答

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方法的地方吗?


BenMaddox,我已经弄清楚我做错了什么。感谢你的帮助。 - skhan
这个解决方案与我的答案有关吗? - BenMaddox

0

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

当我能够使用 agility pack 的电脑时,我会尝试添加一个文档的额外部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接