[英]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());
該節點始終包含空值...請幫助我找到解決此問題的方法...謝謝..
<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.