libxml_use_internal_errors(true);
Я бы не рекомендовал его, поскольку он подавлял бы ошибки, которые выдает lib xml. Вы действительно хотите проверить, правильно ли сформирован HTML или нет (или это действительно текст HTML).
В вашем случае вы можете использовать getElementsByTagName , чтобы получить все теги li
. Теперь вы можете l oop на все соответствующие li
элементы и редактировать только элемент, который появляется в вашем списке 2 и , так как вы хотите редактировать только 2 nd li
element.
Однако при этом у вас есть дочерний узел и текстовый узел (имеющий текст List 2
). Вы можете редактировать только текстовый узел и оставить все остальные узлы как есть.
Фрагмент:
<?php
$dom = new DOMDocument();
$dom->loadHTML('
<div><a class="active" href="link">My String</a></div>
<div>
<ul>
<li><i class="fa fa-list"></i>List 1</li>
<li><i class="fa fa-list"></i>List 2</li>
</ul>
</div>');
foreach($dom->getElementsByTagName('li') as $index => $node){
if($index === 1){ // to skip first li tag(since you want the 2nd one)
foreach($node->childNodes as $child_node){
if($child_node instanceof DOMText){
$child_node->nodeValue = 'Replacement List 2';
break;
}
}
}
}
echo $dom->saveHTML();
Демонстрация: https://3v4l.org/plPa6
Важное замечание здесь DOMDocument
добавил теги DOCTYPE
, html
и body
также к вашим HTML, поскольку ваши начальные HTML не были должным образом структурированы в иерархической структуре.