Я не смог найти более элегантный способ переназначения всех детей, поэтому, думаю, это подойдет.Я думаю, что он получает то, что вам нужно.
(ПРИМЕЧАНИЕ: код обновлен, чтобы отразить дополнительные требования в комментариях.)
$doc = new DOMDocument();
$doc->loadHTML($content);
$x = new DOMXPath($doc);
foreach($x->query('//div/ul/li') as $anchor)
{
$container = $doc->importNode(new DOMElement('div'));
$container->setAttribute('class', 'container');
$next = $anchor->firstChild;
while ($next !== NULL) {
$curr = $next;
$next = $curr->nextSibling;
if (($curr->nodeName != 'h4')
|| ($curr->attributes === NULL)
|| ($curr->attributes->getNamedItem('class') === NULL)
|| !preg_match('#(^| )title( |$)#', $curr->attributes->getNamedItem('class')->nodeValue)
) {
$container->appendChild($anchor->removeChild($curr));
}
}
$anchor->appendChild($container);
}
Что касается персонажакодирование, я возился с этим некоторое время, и это сложная проблема.Символы отображаются правильно при загрузке с loadXML()
, но не с loadHTML()
.Есть обходной путь в комментариях , но это не красиво.Надеемся, что некоторые комментарии пользователей помогут вам найти подходящее решение.