有没有办法使用Symfony的DomCrawler选择父元素的文本节点?
在jQuery中,您可以使用contents()方法并检查nodeType == 3
解决方法:
据我所知,Symfony Crawler不允许您遍历文本节点.对于Crawler通常使用的内容,与文本节点一样深入可能并不常见.
但是,Crawler真正存储文档数据的DOMNode确实允许文本节点遍历.
例如,如果要循环遍历Crawler的所有节点(包括文本节点)(假设它已经过滤到一个结果),您可以执行以下操作:
foreach ($crawler->getNode(0)->childNodes as $node) {
if ($node->nodeName === '#text') {
// you have a text node
}
}
有几点需要注意:
>对getNode()的调用实际上返回了一个DOMNode(我的IDE中的代码完成告诉我DOMElement,但DOMNode是一个更安全的赌注,因为它是基类),所以它将它从Crawler的上下文中拉出来;从这里你需要使用DOMNode属性和方法.
> DOMNode的nodeName属性是元素的HTML标记名称,但对于文本节点,它似乎设置为#text.或者,您也可以使用$node instanceof DOMText来检测文本节点.
我知道这个问题比较老,但我也遇到了这个问题,并希望得到一个答案,因为它在谷歌中出现了很高的水平.
标签:php,dom,symfony
来源: https://codeday.me/bug/20190529/1175931.html