DOMNode::hasChildNodes

(PHP 5, PHP 7, PHP 8)

DOMNode::hasChildNodes 检查节点是否具有子节点

说明

public DOMNode::hasChildNodes(): bool

此函数检查节点是否具有子节点。

参数

此函数没有参数。

返回值

成功时返回 true,失败时返回 false

参见

添加注释

用户贡献的注释 5 注释

6
sansana
13 年前
我个人认为使用简单的:[code]if($DOMNode->childNodes <>0){}[/code] 更好。
4
richard dot gildx at gmail dot com
12 年前
这个 "hasChildNodes()" 练习很简单,可以使其清晰易懂。或者,您可以将其视为标签为空检查。作者:Richard Holm,瑞典。

<?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/>";
?>

输出
root hasChildNodes
text hasChildNodes
none hasNoChildNodes
empty hasNoChildNodes
space hasChildNodes
6
syngcw at syncgw.com
14 年前
此函数有点棘手。如果您想查找 XML 子节点,它将无用。您需要创建一个解决方法

<?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;
}

?>

显示
B b-text
C -> CHILDNODES
D d-text
E
-5
匿名
9 年前
如果它是一个动态文件,我们不能使用 getElementsByTagName,那么我们如何打印所有级别标签的内容?
-10
jintoppy at gmail dot com
15 年前
<?php

$doc
= new DOMDocument;
$node = $doc->createElement("FirstMain", "第一个主节点。它有子节点");
$doc->appendChild($node);
$childnode = $doc->createElement("childnode", "子节点");
$node->appendChild($childnode);
$secondnode = $doc->createElement("SecondMain", "第二个主节点。它没有子节点");
$doc->appendChild($secondnode);
$doc->saveXML();
$nodeElmt = $doc->getElementsByTagName("FirstMain");
/*
如果使用 $nodeElmt = $doc->getElementsByTagName("childnode");
输出结果为 "该节点有子节点"

如果使用 $nodeElmt = $doc->getElementsByTagName("SecondMain");
输出结果为 "该节点没有子节点"

*/

foreach($nodeElmt as $nodeElmt)
{
if(
$nodeElmt->hasChildNodes())
{
echo
"该节点有子节点";
}
else
{
echo
"该节点没有子节点";
}
}

?>

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

输出

该节点有子节点

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