我需要得到每个节点的所有父节点。下面是我的部分代码:
$dom = new DOMDocument;
$dom->loadHTMLfile($myvar);
$allElements = $dom->getElementsByTagName('*');
foreach($allElements as $element){
print $element->tagName;
if(get_parent_class($element) !== NULL){
print ' parent is '.$element->parentNode->tagName.'<br>';
}
else{
print '<br>';
}
}
$myvar = 'sample.html',它看起来像这样:
<html>
<body>
<div id="mango">
This is the mango div. It has some text and a form too.
<form>
<input type="text" name="first_name" value="Yahoo" />
<input type="text" name="last_name" value="Bingo" />
</form>
<table class="inner">
<tr><td>WEW</td><td>Sky</td></tr>
</table>
</div>
<table id="data" class="outer">
<tr><td>Happy</td><td>Sky</td></tr>
<tr><td>Sad</td><td>Sky</td></tr>
<tr><td>Grumpy</td><td>Sky</td></tr>
<tr><td>Horny</td><td>Sky</td></tr>
<tr><td>Fappy</td><td>Sky</td></tr>
</table>
</body>
</html>
输出的前几行看起来像这样:sample.html超文本标记语言注意:未定义的属性:DOMDocument::$tagName在C:'xampp'htdocs'tut'form.php第27行父母是主体父元素是HTMLDiv父元素为body
当$element = <html>
。我不希望它进入if语句,因为它没有父节点。
看完你的html,并尝试了一下,我想我有一个简单的解决方案给你:
if(!empty($element->parentNode->tagName))
试试。
您可以使用instanceOf
:
if ($element->parentNode instanceOf DOMElement) {
document元素的父节点是文档节点本身。所以它是一个DOMDocument,一个DOMNode,而不是一个DOMElement。