Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP: documentElement->childNodes warning

$xml = file_get_contents(example.com);

$dom = new DomDocument();
$dom->loadXML($xml);

$items = $dom->documentElement;

foreach($items->childNodes as $item) { 
 $childs = $item->childNodes;
 foreach($childs as $i) {
  echo $i->nodeValue . "<br />";
 }
}

Now I get this warning in every 2nd foreach:

Warning: Invalid argument supplied for foreach() in file_example.php  on line 14

Please help guys. Thanks!

like image 998
Loreto Gabawa Jr. Avatar asked May 20 '26 05:05

Loreto Gabawa Jr.


1 Answers

Some nodes don't have children, so you're passing a null (invalid) argument to the foreach (just like the warning says).

To avoid the warnings you need to check if the current node has any children. For that you can use the DOMNode::hasChildNodes() method:

foreach($items->childNodes as $item) { 
    if ($item->hasChildNodes()) {
        $childs = $item->childNodes;
        foreach($childs as $i) {
            echo $i->nodeValue . "<br />";
        }
    }
}
like image 77
rogeriopvl Avatar answered May 22 '26 17:05

rogeriopvl