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