次のPHPコードを検討してください
<?php
$html_data =
'<html><body>
<ol>
<li><strong>Question 1</strong> Answer1</li>
<li><strong>Question 2</strong> Answer2</li>
</ol></body></html>';
$doc = new DOMDocument();
$doc->loadHTML($html_data);
$xpath = new DOMXPath($doc);
$ols = $xpath->query('//ol');
$ol = $ols->item(0);
$lis = $ol->childNodes;
foreach ($lis as $li) {
echo $li->firstChild->nodeValue."<br />";
echo $li->lastChild->nodeValue."<br />";
//echo $li->childNodes->item(0)->nodeValue."<br />";
}
?>
このコードの最後の行のコメントを削除して、childNodes DOM Object Arrayにアクセスすると、foreachループは1回だけ実行されます。ただし、上記のようにfirstChildとlastChildを使用して同じ要素にアクセスすると、存在するすべての「li」タグを正常に反復できます。
私はこれをまったく理解できません。これはPHPのバグですか?