我试图使用HtmlAgilityPack库来解析页面中的一些环节,但我没有看到我期望从方法的结果。下面我有一个链接HtmlNodeCollection。对于每一个环节我想检查是否有图像节点,然后分析它attribures但和的SelectNodes方法的SelectSingleNode的linkNode似乎是搜索父文档不linkNode的的childNodes怎么办?

HtmlDocument htmldoc = new HtmlDocument();
htmldoc.LoadHtml(content);
HtmlNodeCollection linkNodes = htmldoc.DocumentNode.SelectNodes("//a[@href]");

foreach(HtmlNode linkNode in linkNodes)
{
    string linkTitle = linkNode.GetAttributeValue("title", string.Empty);
    if (linkTitle == string.Empty)
    {
        HtmlNode imageNode = linkNode.SelectSingleNode("/img[@alt]");     
    }
}

有没有其他办法,我能得到linkNode的图像childnode的alt属性,如果它存在?

有帮助吗?

解决方案

您应该从“/ IMG [@alt]”,因为它意味着你想在文档的根开始。

删除forwardslash前缀
HtmlNode imageNode = linkNode.SelectSingleNode("img[@alt]");

其他提示

使用XPath查询你也可以使用“”以指示搜索应该在当前节点启动。

HtmlNode imageNode = linkNode.SelectSingleNode(".//img[@alt]");

此外,注意空校验。的SelectNodes返回空白收集的空代替。

HtmlNodeCollection linkNodes = htmldoc.DocumentNode.SelectNodes("//a[@href]");

**if(linkNodes!=null)**
{
   foreach(HtmlNode linkNode in linkNodes)
  {
     string linkTitle = linkNode.GetAttributeValue("title", string.Empty);
     if (linkTitle == string.Empty)
     {
       **HtmlNode imageNode = linkNode.SelectSingleNode("img[@alt]");**   
     }
  }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top