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

时间:2013-05-02 11:34:52

标签: php dom-node

<div>
     <a>abc</a>
     xyz
</div>

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

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

2 个答案:

答案 0 :(得分: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);

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

答案 1 :(得分:0)

您的<div>实际上有三个孩子:一个text节点,一个<a>节点和另一个text节点。至少这是XML标准所说的 第一个文本节点包含<div><a>之间的空白区域。第二个包含您的xyz

如果你检查$divElement->childNodes,我相信你应该得到这两个节点,你可以区分这两个节点。