Создать контейнерный 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(); данные?

0

Решение

Конечно да. Большинство из них на самом деле использует те же методы. Например 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>
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector