2015-04-26 15 views
1

У меня есть 1000+ HTML-документов, которые содержат различные таблицы каждый и используют PowerShell для их обработки.HtmlAgilityPack получить таблицы на основе значения ячейки

Я ищу для извлечения определенных таблиц, их можно идентифицировать по первой строке, которая используется для заголовков, и одна из ячеек всегда имеет слово «измерение».

Поскольку 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

Опубликовать минимальный образец HTML, который продемонстрировал бы, как ваш код не работает – har07

+0

FYI, чтобы отформатировать ваш код: заблокировать/выбрать код, затем нажать кнопку '{}' в верхней части редактора – har07

ответ

2

Без дополнительной информации или образец HTML-разметке, я могу только предположить, чтобы использовать потомку оси // чтобы получить все дочерние узлы независимо от того, насколько глубоко они вложены в <table> узла:

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

UPDATE:

После глядя на образец HTML, я думаю, что может быть более эффективным способом, используя более конкретные XPath, например:

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

но конкретного XPath также принести больше риск оставить несколько таблиц, которые, как предполагается, выбирается. Решение является вашим, в соответствии со всей структурой документа и эффективностью.

+1

Я думаю, вы поняли, пусть я тестирую, но возвращаю результаты, и число выглядит правильно. – Radek

+0

Это работает очень хорошо, спасибо! – Radek

+0

@ Radek приветствуется :) рассмотрите также раздел ** ОБНОВЛЕНИЕ **, может или не может удовлетворить ваши потребности, хотя – har07

Смежные вопросы