У меня есть этот HTML:
<tbody>
<tr id="1">
<td>foo faa</td>
<td>faa fii</td>
<td>foo faa</td>
<td>faa fuu</td>
</tr>
<tr id="2">
<td>foo fuu</td>
<td>fyy fuu</td>
<td>foo foo</td>
<td>fuu fii</td>
</tr>
<tr id="3">
<td>fuu faa</td>
<td>fii fuu</td>
<td>fuu fuu</td>
<td>fyy fee</td>
</tr>
<tr id="4">
<td>foo foo</td>
<td>fee faa</td>
<td>fee fyy</td>
<td>foo fuu</td>
</tr>
</tbody>
Элементы td
в моем примере содержат два слова, но в моем реальном случае элементы td
могут содержать больше слов. И tr
элементов может содержать более 4 td
дочерних элементов.
Я хочу выбрать tr
элемент (ов) в зависимости от innerText его потомков. Я хочу иметь возможность искать несколько значений.
Будь примером:
если я буду искать "fuu" и "foo" и "fii", ожидаемый результат xpath должен быть элементами tr
с id 1 и 2.
если я буду искать "fuu" и "fii", ожидаемый результат xpath должен быть элементами tr
с id 1, 2 и 3.
если я ищу только "fee", ожидаемый результат xpath должен быть элементом tr
с id 3 и 4.
Я пробовал это:
//tr[*[contains(text(), 'fuu')] and *[contains(text(), 'foo')] and *[contains(text(), 'fii')]]
Его работа, как и ожидалось (http://xpather.com/Tdg5OGr2). Но, может быть, существует более общее / правильное решение, есть идеи у кого-нибудь?
Если я хочу найти по примеру десять слов, xpath станет действительно большим x)