PHP 8.1.0 RC 2 available for testing

DOMNode::hasChildNodes

(PHP 5, PHP 7, PHP 8)

DOMNode::hasChildNodes Checks if node has children

Descrição

public DOMNode::hasChildNodes(): bool

This function checks if the node has children.

Parâmetros

Esta função não possui parâmetros.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Veja Também

add a note add a note

User Contributed Notes 5 notes

up
7
sansana
10 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
9 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
11 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
-6
Anonymous
6 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
-9
jintoppy at gmail dot com
12 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