簡體   English   中英

HtmlAgilityPack C#— Selectnodes始終返回Null

[英]HtmlAgilityPack C#— Selectnodes Always returns a Null

這是我嘗試與HtmlAgilityPack C#解析器一起使用的xpath文本。

//div[@id = 'sc1']/table/tbody/tr/td/span[@class='blacktxt']

我嘗試使用firefox xpath add = on評估xpath表達式,並成功獲得了必需的項。 但是C#代碼返回Null異常。

HtmlAgilityPack.HtmlNodeCollection node = htmldoc.DocumentNode.SelectNodes("//div[@id ='sc1']/table/tbody/tr/td/span[@class='blacktxt']");            
MessageBox.Show(node.ToString());

該節點始終包含空值...請幫助我找到解決此問題的方法...謝謝..

DOM要求插入<tbody/>標簽

用於構建XPath表達式的所有常用瀏覽器擴展都可在DOM上運行。 與HTML規范相反,DOM規范要求<tr/>元素必須包含在<tbody/>元素內,因此瀏覽器會在缺少這些元素時添加此類元素。 如果使用Firebug(或在DOM上使用的類似開發人員工具)查看HTML源代碼,而不是顯示頁面源代碼(使用wget或在必要時不解釋任何內容的類似工具),則可以輕松看出差異。

解決方案

刪除/tbody軸步驟,您的XPath表達式可能會起作用。

//div[@id = 'sc1']/table/tr/td/span[@class='blacktxt']

如果需要同時支持帶和不帶<tbody/>標簽的HTML

對於更通用的解決方案,您可以將/tbody軸步驟替換為dedecant-or-self步驟// ,但這可能會跳轉到“內部表”中:

//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'] 

更加干凈的XPath 2.0解決方案是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM