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'
Другие вопросы по тегам