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

时间:2014-05-31 05:15:04

标签: php html parsing dom parent-child

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

    $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 =&#39; sample.html&#39;它看起来像这样:

   <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 HTML 注意:未定义的属性:第27行的C:\ xampp \ htdocs \ tut \ form.php中的DOMDocument :: $ tagName 父母是 body parent是html div parent是body

不知何故,它仍然在$element = <html>时进入if子句。我希望它不要输入if语句,因为它没有父节点。提前谢谢。

2 个答案:

答案 0 :(得分:3)

看到你的HTML后,试一试,我想我有一个简单的解决方案:

if(!empty($element->parentNode->tagName))

试试。

答案 1 :(得分:0)

您可以使用instanceOf

if ($element->parentNode instanceOf DOMElement) {

文档元素的父节点是文档节点本身。所以它是一个DOMDocument,一个DOMNode,但不是DOMElement。