我有1000多个HTML文档,每个文档都包含各种表格,并使用PowerShell来处理它们。
我希望提取特定的表格,这些表格可以通过第一行标识,第一行用于标题,其中一个单元格总是包含单词" measurement"。
由于HTML是.doc导出,因此单词可以嵌套在<span>
或<p>
中,因此理想情况下我可以忽略该嵌套级别。
我尝试过类似的事情:
$tables = $doc.DocumentNode.SelectNodes("//table[* = 'measurement']")
但什么都没有回来。
这里还有一些HTML,遗憾的是我无法发布所有内容,但它将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>
答案 0 :(得分:2)
如果没有进一步的信息或示例HTML标记,我只能建议使用后代轴//
来获取所有后代节点,无论它们嵌套在<table>
节点内有多深:
//table[.//* = 'measurement']
更新:
在查看示例HTML之后,我认为通过使用更具体的xpath可能会有更有效的方法,例如:
//table[tr/td//* = 'measurement']
但是特定的xpath也会带来更多冒一些应该被选中的表的风险。根据整个文档结构以及需要多少效率,决定权归你所有。