如何使用PHP DOM分离列表子项节点


How get list subItens nodes separateds using PHP DOM

我看到了这个提示PHP DOM从第一个ul元素获取项

但是在这种情况下:

<li>First item
   <ul>
     <li>
       First SubItem
     </li>
     <li>
       Second SubItem
     </li>
   </ul>
</li>
PHP代码:

$DOM = new DOMDocument;
        libxml_use_internal_errors(true);
        $DOM->loadHTML( $output);
        $items = $DOM->getElementsByTagName('ul');
            echo '<ul>';
                foreach ($items->item(3)->getElementsByTagName('li')        as $li) {
                    var_dump($li);die();
                    echo '<li>'.$li->nodeValue;
                        $ul = $li->getElementsByTagName('ul');
                            echo '<ul>';
                    echo '--->'.$ul->length.'<br>';
                        for($u=0;$u<$ul->length;$u++){
                            foreach ($ul->item($u)->getElementsByTagName('li') as $lii) {
                                echo '<li>'.$lii->nodeValue.'</li>';
                            }
                        }
                        echo '</ul>';
                    echo '</li>';
                }
            echo '</ul>';

问题是:我得到//$li->nodeValue;//"First itemFirst SubItemSecond SubItem"作为第一个节点;我需要把这些条目分开(subItems)

我假设您只是想从这些<li>标记检索文本值。

您可以使用DOMXPath极大地简化查询,因为->query('//li')将获取代码片段中的所有 <li>标记。

$DOM = new DOMDocument();
$DOM->loadHTML($output);
$xPath = new DOMXPath($DOM);
if($xpResponse = $xPath->query('//li/text()')) {
    echo "<ul>'n";
    foreach($xpResponse as $xNode) {
        echo "<li>" . trim($xNode->nodeValue) . "</li>'n";
    }
    echo "</ul>'n";
}

这将简单地输出(作为HTML):

  • 第一项
  • 第一子项
  • 第二子项