使用Symfony DomCrawler选择文本节点

时间:2013-11-25 07:29:15

标签: php dom symfony

有没有办法使用Symfony的DomCrawler选择父元素的文本节点?

在jQuery中,您可以使用contents()方法并检查nodeType == 3

1 个答案:

答案 0 :(得分:6)

据我所知,Symfony Crawler不允许您遍历文本节点。对于Crawler通常使用的内容,与文本节点一样深,可能并不常见。

但是,Crawler真正存储文档数据的DOMNode确实允许文本节点遍历。

例如,如果要循环遍历Crawler的所有节点(包括文本节点)(假设它已经过滤到一个结果),您可以这样做:

foreach ($crawler->getNode(0)->childNodes as $node) {
    if ($node->nodeName === '#text') {
        // you have a text node
    }
}

有几点需要注意:

  1. getNode()的调用实际上返回了一个DOMNode(我的IDE中的代码完成告诉我DOMElement,但DOMNode是一个更安全的赌注,因为它是基类),所以它将它从履带的上下文;从这里你需要使用DOMNode属性和方法。

  2. DOMNode的nodeName属性是元素的HTML标记名称,但对于文本节点,它似乎设置为#text。或者,您也可以使用$node instanceof DOMText来检测文本节点。

  3. 我知道这个问题比较老了,但我也遇到了这个问题,并希望得到一个答案,因为它在谷歌中出现了相当高的。