HtmlAgilityPack C#--Selectnodes始终返回空值

HtmlAgilityPack C#--Selectnodes始终返回空值,c#,xpath,html-parsing,html-agility-pack,C#,Xpath,Html Parsing,Html Agility Pack,这是我试图与HtmlAgilityPack C#解析器一起使用的xpath文本 我尝试使用firefox xpath add=on对xpath表达式求值,并成功地获得了所需的项。但是c代码返回一个空异常 HtmlAgilityPack.HtmlNodeCollection node = htmldoc.DocumentNode.SelectNodes("//div[@id ='sc1']/table/tbody/tr/td/span[@class='blacktxt']");

这是我试图与HtmlAgilityPack C#解析器一起使用的xpath文本

我尝试使用firefox xpath add=on对xpath表达式求值,并成功地获得了所需的项。但是c代码返回一个空异常

HtmlAgilityPack.HtmlNodeCollection node = htmldoc.DocumentNode.SelectNodes("//div[@id ='sc1']/table/tbody/tr/td/span[@class='blacktxt']");            
MessageBox.Show(node.ToString());
节点始终包含空值。。。 请帮我找到解决这个问题的方法。。。 谢谢..

DOM需要插入
标记 所有用于构建XPath表达式的通用浏览器扩展都在DOM上工作。与HTML规范相反,DOM规范要求
元素位于
元素中,因此浏览器会在缺少这些元素时添加这些元素。如果使用Firebug(或在DOM上工作的类似开发人员工具)查看HTML源代码,与显示页面源代码(使用
wget
或在必要时不解释任何内容的类似工具)相比,您可以很容易地看到差异

解决方案 删除
/tbody
axis步骤,您的XPath表达式可能会工作

//div[@id='sc1']/table/tr/td/span[@class='blacktxt']
如果您需要同时支持带有和不带
标记的HTML 对于更通用的解决方案,您可以使用偏心或自步进来替换
/t车身
轴步进,但这可能会跳转到“内部表格”:

//div[@id='sc1']/table//tr/td/span[@class='blacktxt']
最好使用其他XPath表达式:

//div[@id='sc1']/table/tr/td/span[@class='blacktxt'].//div[@id='sc1']/table/tbody/tr/td/span[@class='blacktxt']
一个更干净的XPath2.0唯一解决方案是

//div[@id='sc1']/table/(tbody,self::*)/tr/td/span[@class='blacktxt']

查看您从网络中获得的源代码(Html Agility Pack)和浏览器显示的源代码可能是两件截然不同的事情,因为浏览器可以执行修改源代码/DOM的javascript。告诉我们你有什么来源,你搜索什么,我们可能会告诉你如何使它工作。可能重复的
HtmlAgilityPack.HtmlNodeCollection node = htmldoc.DocumentNode.SelectNodes("//div[@id ='sc1']/table/tbody/tr/td/span[@class='blacktxt']");            
MessageBox.Show(node.ToString());