HtmlAgilityPack 根据单元格值获取表格

HtmlAgilityPack get tables based on cell value

我有 1000 多个 HTML 个文档,每个文档都包含各种表格,并且正在使用 PowerShell 来处理它们。

我想提取特定的表格,这些可以通过第一行识别,用于标题,其中一个单元格总是有单词 "measurement"。

由于 HTML 是 .doc 导出词可以嵌套在 <span><p> 中,所以理想情况下我可以忽略该嵌套级别。

我试过类似的方法:

$tables = $doc.DocumentNode.SelectNodes("//table[* = 'measurement']")

但一无所获。

还有一些 HTML,不幸的是我不能 post 全部,但它是 MS Word 导出为 HTML 文档:

<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0
   style='border-collapse:collapse;mso-table-layout-alt:fixed;border:none;
   mso-border-alt:double windowtext 1.5pt;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
<tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
   <td width=192 valign=top style='width:2.0in;border:solid windowtext 1.0pt;
      padding:0in 5.4pt 0in 5.4pt'>
      <p class=MsoHeading9><span lang=EN-CA>Areas</span></p>
   </td>
   <td width=288 valign=top style='width:3.0in;border:solid windowtext 1.0pt;
      border-left:none;mso-border-left-alt:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
      <p class=MsoHeading9><span lang=EN-CA>measurements</span></p>
   </td>
   <td width=346 valign=top style='width:3.6in;border:solid windowtext 1.0pt;
      border-left:none;mso-border-left-alt:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt'>
      <p class=MsoHeading9><span lang=EN-CA>Objectives</span></p>
   </td>
</tr>

没有进一步的信息或示例 HTML 标记,我只能建议使用后代轴 // 来获取所有后代节点,无论它们嵌套在 <table> 节点中有多深:

//table[.//* = 'measurement']

更新:

查看示例 HTML 后,我认为使用更具体的 xpath 可能会有更有效的方法,例如:

//table[tr/td//* = 'measurement']

但特定的 xpath 也带来了更多的风险,会留下一些应该被选中的表。根据整个文档结构和需要多少效率,由您决定。