C# и Html Пакет ловкости - PullRequest
0 голосов
/ 30 мая 2020

У меня есть несколько файлов, из которых мне нужно извлечь таблицы, содержащие данные. Проблема в том, что у таблиц нет идентификаторов, поэтому мне приходится искать по содержимому (которое постоянно в каждом файле). В каждом файле есть несколько таблиц, и интересующая таблица не имеет постоянного XPath.

<table border="0" cellspacing="0" cellpadding="0" style="BORDER-COLLAPSE: collapse" bordercolor="#111111">
    <tbody>
        <tr> 
            <td class="s">CONSTANT_TEXT</td>
            <td class="l">CHANGING_VALUE</td>
        </tr>

        <tr> 
            <td class="s"> </td>
            <td class="l"><a style="" id="CONSTANT_ID" href="mailto: XXXX</a>
 </td>
        </tr>
    </tbody>

</table>

Как мне: 1. Поиск на основе CONSTANT_TEXT CONSTANT_TEXT возвращает значение 2-го TD CHANGING_VALUE, без зная путь (у него нет идентификатора, и его позиция меняется от файла к файлу). 2. Поиск на основе CONSTANT_TEXT CONSTANT_TEXT, возврат родительской таблицы этого TD

Я сделал поиск и вернул CONSTANT_TEXT с помощью Html Agility Pack, затем перебирал XPath вверх, пока таблица не была достигнута *. 1006 *

var output= document.DocumentNode.SelectNodes("//a[@id='CONSTANT_ID']");
output[0].XPath ="/html[1]/body[1]/table[1]/thead[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[2]/td[2]/a[1]"

Мой план состоял в том, чтобы перебрать каждый вывод и получить XPath для самой низкой встречающейся таблицы, table [1], а затем извлечь данные.

Спасибо, Майк

1 Ответ

1 голос
/ 30 мая 2020

Строго говоря, вам понадобится следующий XPath:

Поиск на основе CONSTANT_TEXT CONSTANT_TEXT, возврат значения 2-го TD CHANGING_VALUE

//td[.="CONSTANT_TEXT"]/following-sibling::td[1]/text()

Вывод : CHANGING_VALUE

Поиск на основе CONSTANT_TEXT CONSTANT_TEXT, возврат родительской таблицы этого TD

//td[.="CONSTANT_TEXT"]/ancestor::table[1]

Вывод: <table> element

...