HtmlAgilityPackselectchildNodes不是预期的
我试图使用HtmlAgilityPack库来parsing页面中的一些链接,但是我没有看到我期望的方法的结果。 在下面我有一个HtmlNodeCollection的链接。 对于每一个链接,我想检查是否有一个图像节点,然后parsing它的attribures,但是linkNode的SelectNodes和SelectSingleNode方法似乎是search父文档而不是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]”中删除正向前缀前缀,因为它表示您要从文档的根目录开始。
HtmlNode imageNode = linkNode.SelectSingleNode("img[@alt]");
使用xpath查询,你也可以使用“。” 指示search应该从当前节点开始。
HtmlNode imageNode = linkNode.SelectSingleNode(".//img[@alt]");
另外,请注意空值检查。 SelectNodes返回null而不是空白集合。
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]");** } } }