DOMNode::hasChildNodes

(PHP 5, PHP 7, PHP 8)

DOMNode::hasChildNodes Checks if node has children

Descrizione

public DOMNode::hasChildNodes(): bool

This function checks if the node has children.

Elenco dei parametri

Questa funzione non contiene parametri.

Valori restituiti

Restituisce true in caso di successo, false in caso di fallimento.

Vedere anche:

add a note add a note

User Contributed Notes 5 notes

up
7
sansana
14 years ago
Personally I think using a simple:[code]if($DOMNode->childNodes <>0){}[/code] works better.
up
5
richard dot gildx at gmail dot com
12 years ago
This "hasChildNodes()" exercise is simple enough to make it clear and understandable. Or, you could take it as a tag empty check. By Richard Holm, Sweden.

<?php
$xmldoc
=
'<?xml version="1.0" ?>
<root>
<text>Text</text>
<none/>
<empty></empty>
<space> </space>
</root>'
;

$domdoc=new DOMDocument();
$domdoc->loadXML($xmldoc);

$tag=$domdoc->getElementsByTagName('root')->item(0);
$v=$tag->hasChildNodes()?" hasChildNodes":" hasNoChildNodes";
echo
$tag->tagName.$v."<br/>";

$tag=$domdoc->getElementsByTagName('text')->item(0);
$v=$tag->hasChildNodes()?" hasChildNodes":" hasNoChildNodes";
echo
$tag->tagName.$v."<br/>";

$tag=$domdoc->getElementsByTagName('none')->item(0);
$v=$tag->hasChildNodes()?" hasChildNodes":" hasNoChildNodes";
echo
$tag->tagName.$v."<br/>";

$tag=$domdoc->getElementsByTagName('empty')->item(0);
$v=$tag->hasChildNodes()?" hasChildNodes":" hasNoChildNodes";
echo
$tag->tagName.$v."<br/>";

$tag=$domdoc->getElementsByTagName('space')->item(0);
$v=$tag->hasChildNodes()?" hasChildNodes":" hasNoChildNodes";
echo
$tag->tagName.$v."<br/>";
?>

Output:
root hasChildNodes
text hasChildNodes
none hasNoChildNodes
empty hasNoChildNodes
space hasChildNodes
up
6
syngcw at syncgw.com
14 years ago
This function is a bit tricky. If you want to find XML childnodes it is useless. You need to create a work-around:

<?php

$x
= new DOMDocument();
$x->loadXML('
<A>
<B>b-text</B>
<C>
  <D>d-text</D>
</C>
<E/>
</A>'
);

shownode($x->getElementsByTagName('A')->item(0));
function
shownode($x) {
foreach (
$x->childNodes as $p)
  if (
hasChild($p)) {
      echo
$p->nodeName.' -> CHILDNODES<br>';
     
shownode($p);
  } elseif (
$p->nodeType == XML_ELEMENT_NODE)
   echo
$p->nodeName.' '.$p->nodeValue.'<br>';
}
function
hasChild($p) {
if (
$p->hasChildNodes()) {
  foreach (
$p->childNodes as $c) {
   if (
$c->nodeType == XML_ELEMENT_NODE)
    return
true;
  }
}
return
false;
}

?>

shows:
B b-text
C -> CHILDNODES
D d-text
E
up
-5
Anonymous
9 years ago
Hi what if its a dynamic file and we cannot use get elements by tag name then how do we print the contents of all level tags?
up
-10
jintoppy at gmail dot com
15 years ago
<?php

$doc
= new DOMDocument;
$node = $doc->createElement("FirstMain", "First Main Node. This have child");
$doc->appendChild($node);
$childnode = $doc->createElement("childnode", "child node");
$node->appendChild($childnode);
$secondnode = $doc->createElement("SecondMain", "First Main Node. This don't have child");
$doc->appendChild($secondnode);
$doc->saveXML();
$nodeElmt = $doc->getElementsByTagName("FirstMain");
/*
if given as $nodeElmt = $doc->getElementsByTagName("childnode");
the output would be "This node has childnodes"

if given as $nodeElmt = $doc->getElementsByTagName("SecondMain");
the output would be "This node has no childnodes"

*/

foreach($nodeElmt as $nodeElmt)
{
if(
$nodeElmt->hasChildNodes())
{
echo
"This node has childnodes";
}
else
{
echo
"This node has no childnodes";
}
}

 
?>

- - - - - - - - - - - - - -

Output:

This node has childnodes

- - - - - - - - - - - - - -
To Top