Я использую Xpath для извлечения данных из файлов Excel. Я использую приведенный ниже код Xpath, чтобы получить значения под определенным c словом.
Код:
//tr[position() > count(//tr[contains(.,'Tariff')]/preceding-sibling::tr)+1]/td[position() = count(//tr/td[contains(.,'Tariff')]/preceding-sibling::td)+1]
Это работает, но я натолкнулся на некоторые Excels, которые добавляют пустой <td>
сразу после слова «Тариф». Что на самом деле испортит конечный результат. Ниже приведена часть Excel, которая преобразуется в HTML источник, с которым я работаю.
Код:
<tr style="height:22px;">
<td style="padding:0 2px;text-align:center;border:1px solid #000;vertical-align:bottom;">22</td>
<td data-cell="A22" style="border-color:#000;border-bottom:thin solid #000000;font-weight:700;vertical-align:middle;padding-left:2px;padding-right:2px;" rowspan="2">Tariff </td>
<td data-cell="B22" style="border-color:#000;border-bottom:thin solid #000000;font-weight:700;vertical-align:middle;padding-left:2px;padding-right:2px;" rowspan="2">Description</td>
<td data-cell="C22" style="border-color:#000;border-bottom:thin solid #000000;font-weight:700;text-align:center;vertical-align:middle;padding-left:2px;padding-right:2px;" rowspan="2">Country of origin</td>
<td data-cell="D22" style="border-color:#000;border-bottom:thin solid #000000;font-weight:700;text-align:center;vertical-align:middle;padding-left:2px;padding-right:2px;" rowspan="2">Quantity</td>
<td data-cell="E22" style="border-color:#000;border-bottom:thin solid #000000;font-weight:700;text-align:center;vertical-align:middle;padding-left:2px;padding-right:2px;" rowspan="2">Amount DKK</td>
<td data-cell="F22" style="mso-number-format:'0';border-color:#000;border-bottom:thin solid #000000;font-weight:700;text-align:center;vertical-align:middle;padding-left:2px;padding-right:2px;" rowspan="2">Net weight kg</td>
<td data-cell="G22" style="border-color:#000;font-size:13px;padding-left:2px;padding-right:2px;"></td>
</tr>
<tr style="height:26px;">
<td style="padding:0 2px;text-align:center;border:1px solid #000;vertical-align:bottom;">23</td>
<td data-cell="G23" style="border-color:#000;font-size:13px;padding-left:2px;padding-right:2px;"></td>
</tr>
<tr style="height:20px;">
<td style="padding:0 2px;text-align:center;border:1px solid #000;vertical-align:bottom;">24</td>
<td data-cell="A24" style="border-color:#000;border-top:thin solid #000000;padding-left:2px;padding-right:2px;">42022290</td>
<td data-cell="B24" style="border-color:#000;border-top:thin solid #000000;vertical-align:middle;padding-left:2px;padding-right:2px;">BAG</td>
<td data-cell="C24" style="border-color:#000;border-top:thin solid #000000;text-align:center;vertical-align:middle;padding-left:2px;padding-right:2px;">CN</td>
<td data-cell="D24" style="border-color:#000;border-top:thin solid #000000;text-align:center;vertical-align:middle;padding-left:2px;padding-right:2px;">2</td>
<td data-cell="E24" style="mso-number-format:'#,##0.00';border-color:#000;border-top:thin solid #000000;text-align:center;vertical-align:middle;padding-left:2px;padding-right:2px;">147,06</td>
<td data-cell="F24" style="mso-number-format:'0.000';border-color:#000;border-top:thin solid #000000;text-align:center;vertical-align:middle;padding-left:2px;padding-right:2px;">0,558</td>
<td data-cell="G24" style="border-color:#000;font-size:13px;padding-left:2px;padding-right:2px;"></td>
</tr>
<tr style="height:20px;">
<td style="padding:0 2px;text-align:center;border:1px solid #000;vertical-align:bottom;">25</td>
<td data-cell="A25" style="border-color:#000;padding-left:2px;padding-right:2px;">61043900</td>
<td data-cell="B25" style="border-color:#000;vertical-align:middle;padding-left:2px;padding-right:2px;">JACKET</td>
<td data-cell="C25" style="border-color:#000;text-align:center;vertical-align:middle;padding-left:2px;padding-right:2px;">CN</td>
<td data-cell="D25" style="border-color:#000;text-align:center;vertical-align:middle;padding-left:2px;padding-right:2px;">1</td>
<td data-cell="E25" style="mso-number-format:'#,##0.00';border-color:#000;text-align:center;vertical-align:middle;padding-left:2px;padding-right:2px;">146,14</td>
<td data-cell="F25" style="mso-number-format:'0.000';border-color:#000;text-align:center;vertical-align:middle;padding-left:2px;padding-right:2px;">0,364</td>
<td data-cell="G25" style="border-color:#000;font-size:13px;padding-left:2px;padding-right:2px;"></td>
</tr>
<tr>
Я хочу пропустить это,
Код:
<tr style="height:26px;">
<td style="padding:0 2px;text-align:center;border:1px solid #000;vertical-align:bottom;">23</td>
<td data-cell="G23" style="border-color:#000;font-size:13px;padding-left:2px;padding-right:2px;"></td>
</tr>
Я пытался использовать //tr[contains(.,'Tariff') and (text()!='')]/preceding-sibling::tr)+1
, и я пытался not(contains(.,''))
, но это также не сработало. Может кто-нибудь помочь мне понять это.