如何使用PHP DOM将list subItens节点分开

时间:2016-08-25 13:01:19

标签: php list dom

我看到了这个提示 PHP DOM get items from first ul element

但在这种情况下:

<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-&gt; nodeValue; //“第一个itemFirst SubItemSecond SubItem”作为Fist节点; 我需要将这些项分开(subItems)

1 个答案:

答案 0 :(得分:1)

我假设你只想从那些<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):

  • 第一项
  • First SubItem
  • Second SubItem