如何仅使用DOMElement从当前节点获取文本?

ale*_*347 1 php dom-node

<div>
     <a>abc</a>
     xyz
</div>
Run Code Online (Sandbox Code Playgroud)

鉴于上面的HTML结构,$divElement->nodeValue当我想只获得'xyz'时,返回'abc xyz'.$divElement->getAttribute('value')是空的.

如何在不删除<a>元素的情况下获得'xyz' ?

Pas*_*rby 5

只需遍历<div>并组合所有文本节点:

http://3v4l.org/fnTAF

$dom=new DOMDocument;
$dom->loadHTML(<<<HTML
<div>
     <a>abc</a>
     xyz
</div>
HTML
);
$div=$dom->getElementsByTagName("div")->item(0);
var_dump($div->childNodes->length);//just to debug
$txt="";
foreach(range(0,$div->childNodes->length-1) as $idx)
{
    if($div->childNodes->item($idx)->nodeType==3)
    {
        $txt.=$div->childNodes->item($idx)->nodeValue;
    }
}
var_dump($txt);
Run Code Online (Sandbox Code Playgroud)

nodeType==3表示文本节点.相应的nodeName#text.