HtmlAgilityPack选择的childNodes未如预期
-
21-08-2019 - |
题
我试图使用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]");**
}
}
}
不隶属于 StackOverflow