使用Xpath和Linq查找特定节点

本文关键字:节点 查找 Linq Xpath 使用 | 更新日期: 2023-09-27 18:18:06

使用HtmlAgilityPack和Linq以及以下html字符串,我试图获得"最后日期到文件:"日期。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");

似乎应该有一种方法来获得基于innertext的单个节点,但我正在获取文档中所有td标签的集合。

使用Xpath和Linq查找特定节点

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");将返回包含"Last"的b标签,以及包含btd标签,以及包含tdtr,以及包含trtable等等。

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

只返回2个td元素。