Я пытаюсь получить HTML в этом шаблоне ...
<p>a</p>
<p>b</p>
<p>c</p>
...
<h3>title</h3>
<p>e</p>
<p>e</p>
<p>f</p>
...
<h3>title2</h3>
...
... и превратить его в ...
<ul>
<li>
<blockquote>
<p>a</p>
<p>b</p>
<p>c</p>
<cite>title</cite>
</blockquote>
</li>
<li>
<blockquote>
<p>d</p>
<p>e</p>
<p>f</p>
<cite>title2</cite>
</blockquote>
</li>
</ul>
У меня есть PHP-код...
$dom = new DOMDocument('1.0', 'utf-8');
$dom->preserveWhiteSpace = FALSE;
$dom->loadHTML($content);
$ul = $dom->createElement('ul');
$body = $dom->getElementsByTagName('body')->item(0);
$blockquote = FALSE;
foreach($body->childNodes as $element) {
if ($element->nodeType != XML_ELEMENT_NODE) {
continue;
}
if ( ! $blockquote) {
$blockquote = $dom->createElement('blockquote');
$li = $dom->createElement('li');
}
switch ($element->nodeName) {
case 'p':
$blockquote->appendChild($element);
break;
case 'h3':
$li->appendChild($blockquote);
$ul->appendChild($li);
$blockquote = $li = FALSE;
break;
}
}
$body->appendChild($ul);
echo $dom->saveHTML();
Хотя функциональность не была закончена, я заметил, что цикл остановился, когда я добавил $blockquote->appendChild($element)
.
Если я удаляю все вещи appendChild
, цикл работаетхорошо.
Я предполагаю, что, перемещая текущий элемент в итерации, он прерывает цикл.
Как бы заставить это работать?