使用 Xpath 和 Linq 查找特定节点

Finding a specific node using Xpath and Linq

使用 HtmlAgilityPack 和 Linq 以及以下 html 字符串,我正在尝试获取 "Last Date to file:" 日期。 XPath 让我无法理解

<table>
  <tbody>
  <tr>
    <td><b></b> John E. Clement
   </td>
<td>
<b></b>
</td>
<td>
<b>Chapter: </b>1
</td>
</tr>
<tr>
<td>
<b>Office:/b>Littleton 
</td>
<td>
<b>&nbsp;&nbsp; &nbsp;&nbsp; </b>
</td>
<td><b>Last Date to file: </b>**04/18/2017**</td>
</tr>
<tr>
<td><b>Boss: </b>Michael Meyer </td>
<td><b></b></td>
<td><b>Last Date to file again: </b>06/06/2018</td>
</tr>
</tbody>
</table>

我的 C# 代码是:

 HtmlAgilityPack.HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("*My file with the html above*");
var lastDate = doc.DocumentNode.Descendants().Where(a=>a.InnerText.Contains("Last");

似乎应该有一种方法可以根据内部文本获取单个节点,但我正在获取文档中所有 td 标签的集合。

DocumentNode.Descendants() 有效获取文档中除根以外的所有节点。 节点的 InnerText 属性 包括该节点内包含的所有文本,包括后代节点。例如,给定 html

<div>
    This <span>is some <b>text</b></span>
</div>

div 标签的 InnerText 是 "This is some text"。

因此,查询 doc.DocumentNode.Descendants().Where(a=>a.InnerText.Contains("Last"); 将 return 包含 "Last" 的 b 标签,以及包含 [=] 的 td 标签16=],以及包含 tdtr,以及包含 trtable 等等。

尝试按节点类型以及 InnerText 进行过滤,如下所示: var lastDate = doc.DocumentNode.Descendants().Where(a => a.Name == "td" && a.InnerText.Contains("Last"));

这return只有2个td元素。