Это как-то связано с направлением:
for ($i = 0; $i < $sub->length; $i++) {
$pre = $sub->item($i);
$fragment = $doc->createDocumentFragment();
$fragment->appendXML(str_replace('&', '&', '<p>& it\'s replaced</p>'));
$pre->parentNode->replaceChild($fragment, $pre);
}
не работает, но
for ($i = $sub->length -1; $i >=0; $i--) {
$pre = $sub->item($i);
$fragment = $doc->createDocumentFragment();
$fragment->appendXML(str_replace('&', '&', '<p>& it\'s replaced</p>'));
$pre->parentNode->replaceChild($fragment, $pre);
}
отлично работает. Должно быть, что-то вроде внутреннего счетчика.
HTH Andreas