使用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> </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标签的集合。
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
标签,以及包含b
的td
标签,以及包含td
的tr
,以及包含tr
的table
等等。
尝试按节点类型和InnerText过滤,如下所示:var lastDate = doc.DocumentNode.Descendants().Where(a => a.Name == "td" && a.InnerText.Contains("Last"));
只返回2个td元素。