Создайте контейнер Div с DOM / XPATH

Я только что создал новый ОБЪЕКТ DOM XPATH.

И после пары операций я сохранил свой результат на SaveHtml.

$String[] = $dom->saveHTML();

А затем я просто помещаю содержимое в файл.

file_put_contents($filename, $string);

Структура Html примерно такая.

  <div if = "rand11">
  </div>
  <div if = "rand24">
  </div>
  <div if = "rand51">
  </div>

Есть несколько методов для создания новых div. Вы можете использовать ->createElement. Кроме того, вы можете разместить этот новый элемент с помощью ->parentNode->insertBefore, но невозможно создать контейнерный div, как здесь.

  <div if = "container-div">
  <div if = "rand11">
  </div>
  <div if = "rand24">
  </div>
  <div if = "rand51">
  </div> </div>

Я пробовал несколько способов сделать это, но безуспешно.

Итак, у меня есть пара вопросов:

1. Можно ли создать контейнер Div напрямую, изменяя Dom?

2. Можно ли добавить новый элемент Html в массив, содержащий данные $dom->saveHTML();?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
126
1

Ответы 1

Конечно да. Большинство из них фактически использует одни и те же методы. Например, appendChild()/insertBefore() не просто используются для новых узлов, они могут перемещать существующие узлы.

$html = <<<'HTML'
<div if = "rand11"></div>
<div if = "rand24"></div>
<div if = "rand51"></div>
HTML;

$document = new DOMDocument();
$document->loadHTML($html);
$xpath = new DOMXpath($document);

// fetch the nodes that should be put inside the container
$nodes = $xpath->evaluate('//div[starts-with(@if, "rand")]');
// validate that here is at least one node
if ($first = $nodes[0]) {
    // create the container and insert it before the first
    $container = $first->parentNode->insertBefore(
        $document->createElement('div'), $first
    );
    $container->setAttribute('class', 'container-div');
    // move all the fetched nodes into the container
    foreach($nodes as $node) {
        $container->appendChild($node);
    }

    // output formatted
    $document->formatOutput = TRUE;
    echo $document->saveHTML($container);
}

Выход:

<div class = "container-div"> 
<div if = "rand11"></div> 
<div if = "rand24"></div> 
<div if = "rand51"></div> 
</div>

Другие вопросы по теме