Извлечение и сброс DOM-узла (и его дочерних элементов) в PHP - PullRequest
2 голосов
/ 08 октября 2011

'У меня есть следующий сценарий, и я уже часами пытаюсь справиться с ним: я разрабатываю тему Wordpress (следовательно, PHP) и хочу проверить, содержит ли содержимое сообщения (которое является HTML)тег с определенным идентификатором / классом.Если это так, я хочу извлечь его из содержимого и поместить в другое место.Пример: допустим, текстовое содержимое поста Wordpress равно

<?php
  /* $content actually comes from WP function get_the_content() */
  $content = '<p>some text and so forth that I don\'t care about...</p> <div class="the-wanted-element"><p>I WANT THIS DIV!!!</p></div>';
?>

Итак, как я могу извлечь этот div с классом (можно также присвоить ему идентификатор), вывести его (с тегами и всем этим) в одном месте шаблона, и вывести остальные (без извлеченного тега, конечно) в другом месте шаблона?Я уже пробовал с классом DOMDocument, пита для меня, может быть, я слишком глуп.

1 Ответ

2 голосов
/ 08 октября 2011

Попробуйте:

$content = '<p>some text and so forth that I don\'t care about...</p> <div class="the-wanted-element"><p>I WANT THIS DIV!!!</p></div>';

$dom = new DomDocument;
$dom->loadHtml($content);

$xpath = new DomXpath($dom);
$contents = '';
foreach ($xpath->query('//div[@class="the-wanted-element"]') as $node) {
  $contents = $dom->saveXml($node);
  break;
}

echo $contents;

Как получить оставшиеся xml / html:

$content = '<p>some text and so forth that I don\'t care about...</p> <div class="the-wanted-element"><p>I WANT THIS DIV!!!</p></div>';

$dom = new DomDocument;
$dom->loadHtml($content);

$xpath = new DomXpath($dom);
foreach ($xpath->query('//div[@class="the-wanted-element"]') as $node) {
  $node->parentNode->removeChild($node);
  break;
}

$contents = '';
foreach ($xpath->query('//body/*') as $node) {
    $contents .= $dom->saveXml($node);
}

echo $contents;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...