DOMXPath Match text
Пример кода:
$html = <<<END
<tr>
<td>Text-1</td>
</tr>
<tr>
<td>Blah 1</td>
<td>Blah 2</td>
<td>Blah 3</td>
<td>Blah 4</td>
</tr>
<tr>
<td>Text-2</td>
</tr>
<tr>
<td>Blah 1</td>
<td>Blah 2</td>
<td>Blah 3</td>
<td>Blah 4</td>
</tr>
END;
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadhtml($html);
$xpath = new DOMXPath($dom);
// Grab the text
$nodes = $xpath->query('//td[contains(text(), "Text-2")]|//td[contains(text(), "Blah 1")]/following-sibling::td');
echo $nodes->item(0)->textContent;
Я пытаюсь захватить Blah 2 под Text-2, проблема в том, что он захватывает Blah 2 под Text-1
2 ответа
Нашел ответ:
//*[text()='Text-2']/following::td[text()='Blah 1']/following-sibling::td
Сначала найдите <tr>
это имеет <td>
ребенок с "Text-2"
, затем пройдитесь по следующему брату, пока не найдете <td>
который имеет "Blah 1"
, Ответ следующий брат этого.
//tr[contains(td/text(), "Text-2")]/following-sibling::tr/td[contains(text(), "Blah 1")]/following-sibling::td'