DOM

时间:2016-05-11 14:33:15

标签: php dom

我正在编写一个代码来自动翻译带有DOM的html文件,我无法获得像P或SPAN这样的文本元素。这是我的PHP代码:

<?php

    $fname="t1.html";
    parse_file($fname);


function process_element($elt) {

    echo "name=".$elt->nodeName." type=".$elt->nodeType."\n";
    echo "val='".$elt->nodeValue."'\n";
    echo "text_content='".$elt->textContent."'\n";
    if (!isset($item->childNodes)) return;
    $children = $item->childNodes;
    foreach($children as $child) {
        process_element($child);
    }
}

function parse_file($filename) {


    $document=new DOMDocument();
    $document->load($filename);

    $items=$document->documentElement;
    foreach($items->childNodes as $item) {
        process_element($item);
    }

}
?>

这是我正在使用的示例HTML文件:

[niko@dev1 www]$ cat t1.html 
<html>
<body>
<p>hello world<br/>
<span>just text</span>
</p>
</body>
</html>
[niko@dev1 www]$ 

这就是我得到ouptut的原因:

[niko@dev1 www]$ php -f p.php 
name=#text type=3
val='
'
text_content='
'
name=body type=1
val='
hello world
just text

'
text_content='
hello world
just text

'
name=#text type=3
val='
'
text_content='
'
[niko@dev1 www]$ 

如您所见,DOM未检测到<p><span>标记。为什么这样,我如何让DOM返回这些元素?

1 个答案:

答案 0 :(得分:0)

process_element方法的后半部分突然使用未声明的变量$item而不是$elmt。 校正:

function process_element($elt) {
    echo "name=".$elt->nodeName." type=".$elt->nodeType."\n";
    echo "val='".$elt->nodeValue."'\n";
    echo "text_content='".$elt->textContent."'\n";
    if (!isset($elt->childNodes)) return;
    $children = $elt->childNodes;
    foreach($children as $child) {
        process_element($child);
    }
}