Есть два подхода к этому, первый - как вы работаете с getElementsByTagName()
, идея состоит в том, чтобы просто выбрать первый тег <li>
и предположить, что он правильный ...
$ols = $doc->getElementsByTagName('ol');
foreach($ols as $ol){
$lis = $ol->getElementsByTagName('li')[0];
echo $doc->saveHTML($lis).PHP_EOL;
}
Это отголоски ...
<li>
<span>parent</span>
<ul>
<li><span>nested 1</span></li>
<li><span>nested 2</span></li>
</ul>
</li>
, который должен работать - НО порой не достаточно точен.
Другим методом будет использование XPath, где вы можете указать уровни тегов документа, которые вы хотите получить. При этом используется //ol/li
, т. Е. Любой тег <ol>
с непосредственным потомком <li>
.
$xp = new DOMXPath($doc);
$lis = $xp->query("//ol/li");
foreach ( $lis as $li ) {
echo $doc->saveHTML($li);
}
это также дает ...
<li>
<span>parent</span>
<ul>
<li><span>nested 1</span></li>
<li><span>nested 2</span></li>
</ul>
</li>