C# 使用SelectSingleNode的htmlagilitypack

C# 使用SelectSingleNode的htmlagilitypack,c#,xpath,html-agility-pack,selectsinglenode,C#,Xpath,Html Agility Pack,Selectsinglenode,我一直在尝试使用HtmlAgilityPack获得下面的值,但没有成功。我正在使用SelectSingleNode 这是我的html <html> <body> <table> <tr><td>One</td></tr> </table> </body> </html> test(HtmlNode)变量为空 如何从您需要使用的te

我一直在尝试使用HtmlAgilityPack获得下面的值,但没有成功。我正在使用SelectSingleNode

这是我的html

<html>
<body>
    <table>
        <tr><td>One</td></tr>       
    </table>
</body>
</html>
test
(HtmlNode)变量为空

如何从您需要使用的
text()
中获取
One的值:

此外,还需要删除
t车身
。html中没有
tbody

如图所示,您的示例没有
tbody
节点,因此您的XPath不会返回任何节点(
null
对于
SelectSingleNode

修正:

调试提示:缓慢构建XPath并检查每个结果/子节点:

     "/html/body/table/" - some children
     "/html/body/table/tbody/"  - null
     "/html/body/table/tr/" - some children
     "/html/body/table/tr/td" - score

当找不到父节点时,为什么希望子节点(文本)存在?好的观点。刚才注意到原始xpath是引用一个不存在的
tbody
节点。+1:实际答案(
tbody
不在示例中)。请注意,
text()
绝对与问题无关,也不是必需的(除非实际查找“td”中的文本节点,而OP的示例显示的不是文本节点,InnerHtml也包括所有节点,对于特定示例也是如此),也感谢您回答我的问题。我回答了Alexei的答案,上面提到了我的xpath中有tbody的原因。我知道没有tbody,但当我使用Chrome的开发工具(F12)然后复制elemen的xpath(右键单击)时,xpath包含tbody文本。谢谢。是的,我知道没有tbody,但是当我使用Chrome的开发工具(F12)然后复制元素的xpath(右键单击)时,xpath包含tbody文本。
var test = doc.DocumentNode.SelectSingleNode("/html/body/table/tr/td/text()");
HtmlNode test = doc.DocumentNode.SelectSingleNode("/html/body/table/tr/td");
     "/html/body/table/" - some children
     "/html/body/table/tbody/"  - null
     "/html/body/table/tr/" - some children
     "/html/body/table/tr/td" - score