Wes*_*ley 21 php dom html-parsing symfony
我正在使用DomCrawler组件:http://symfony.com/doc/current/components/dom_crawler.html
我想,使用类似CSS的语法,获取具有特定属性值的元素.
这是我正在使用的代码:
$link = $crawler->filter('#product a[data-type="bla"]');
Run Code Online (Sandbox Code Playgroud)
这似乎有效,因为以下返回1:
echo count($link);
Run Code Online (Sandbox Code Playgroud)
但是,我永远不能进一步过滤.我不能做:
$link->filter('img')->attr('src');
Run Code Online (Sandbox Code Playgroud)
这会导致以下错误消息:
The current node list is empty.
Run Code Online (Sandbox Code Playgroud)
但是,我确信它不是.
我已经尝试了其他元素的语法,它总是一样的.我做错了或者这是不可能的(使用css语法,而不是xpath)
M8R*_*w5r 33
我无法解决你的问题.使用两个软件库dom-crawler和css-selector的当前开发版本(以及2.1.0和2.2.0版本),您提供的示例代码可以正常工作,考虑以下示例HTML:
<?php
use Symfony\Component\DomCrawler\Crawler;
// require dependencies here
$html = <<<'HTML'
<!DOCTYPE html>
<html>
<body>
<p class="message">Hello World!</p>
<p>Hello Crawler!</p>
<div id="product">
<a data-type="bla">
<img src="OK">
</a>
</div>
</body>
</html>
HTML;
$crawler = new Crawler($html);
$link = $crawler->filter('#product a[data-type="bla"]');
echo var_dump(count($link));
var_dump($link->filter('img')->attr('src'));
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这正是您的代码(只是略有不同但基本上没有),它逐字提供以下输出:
int(1)
string(2) "OK"
Run Code Online (Sandbox Code Playgroud)
第一个输出行是count()第二个输出行,第二个输出行是src属性值.
你有运行作曲家更新吗?你仔细检查了输入吗?
| 归档时间: |
|
| 查看次数: |
38153 次 |
| 最近记录: |