DOMXPath Match text

0

Пример кода:

$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

  • 0
    Вы не должны добавлять ответ в свой вопрос, пожалуйста, оставьте отдельный ответ.
Теги:
domdocument
domxpath

2 ответа

0

Нашел ответ:

//*[text()='Text-2']/following::td[text()='Blah 1']/following-sibling::td
0

Сначала найдите <tr>, у которого есть дочерний элемент <td> с "Text-2", затем перейдите к следующему брату, пока не найдете <td> который имеет "Blah 1". Ответ следующий брат.

//tr[contains(td/text(), "Text-2")]/following-sibling::tr/td[contains(text(), "Blah 1")]/following-sibling::td'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню