Вы можете использовать простой дом для этого: http://simplehtmldom.sourceforge.net/
Simple dom позволяет назначать обратный вызов для каждого элемента в html, вот пример:
function my_callback($element)
{
if ($element->tag=='b')
{
$element->outertext = str_replace("apples","oranges",$element->innertext);
}
}
и вы можете работать с ним так:
$html = str_get_html('<html> your data </html>');
$html->set_callback('my_callback');
echo $html; //Modifed
html модифицируется только при сбрасывании данных, если вам нужно внести определенные изменения, лучше всего делать их вручную, например, так:
$elements = $html->find('ul li ul');
если вы хотите каким-то образом изменить li, вы можете сделать:
foreach($elements as $item)
{
$item->class = "some_class";
}