PHP如何检查DOM对象的父对象是否存在


PHP how to check if parent of DOM object exist

我需要得到每个节点的所有父节点。下面是我的部分代码:

    $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。