【发布时间】:2017-03-22 12:32:40
【问题描述】:
我正在尝试使用 DOMCrawler 过滤我的 html,但如果找到结果,我需要中断。
是否可以脱离each?
或者如果我使用foreach,我怎样才能得到$node->text();?还是不可能?
HTML:
<table cellspacing="0" cellpadding="0" align="Center" rules="all" border="1">
<tbody>
<tr>
<td>Entity Name</td>
<td>NV Business ID</td>
<td>Status</td>
<td>Type</td>
</tr>
<tr>
<td><a href="">GOOGLE</a></td>
<td><a href=""></a></td>
<td><a href="">Expired</a></td>
<td><a href="">Reserved Name</a></td>
</tr>
<tr>
<td><a href="">GOOGLE INC.</a></td>
<td><a href="">NV20161275322</a></td>
<td><a href="">Active</a></td>
<td><a href="">Foreign Corporation</a>
</td>
</tr>
</tbody>
</table>
PHP:
$client = new Client();
$client->setHeader('User-Agent', "Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.15");
$crawler = $client->request('GET', 'http://nvsos.gov/sosentitysearch/');
$form = $crawler->selectButton('Search')->form();
$crawler = $client->submit($form, array(
'ctl00$MainContent$txtSearchBox' => 'google',
));
if($this->available == false)return;
$crawler->filter('table tr')->each(function (\Symfony\Component\DomCrawler\Crawler $element) {
$status = $element->filter('td')->eq(2)->text();
echo $status;
if ($status == 'Active') {
$this->available = false;
break;
}
});
我想获得状态。然后如果状态等于“活动”,我想打破循环。
好的,现在我想出了一些办法。
$crawler = $crawler->filter('#ctl00_MainContent_objSearchGrid_dgCorpSearchResults');
foreach ($crawler as $i => $content) {
$crawler = new Crawler($content);
foreach ($crawler->filter('#ctl00_MainContent_objSearchGrid_dgCorpSearchResults') as $node) {
$longStatus = $node->nodeValue;
echo $longStatus;
}
}
但现在我不知道如何在<tr> 中获得第三个<td>。
【问题讨论】:
-
看起来不可能。
-
你能给出一个示例文档并描述你想要得到的结果吗?
-
@xabbuh 嘿,更新了我的问题。
-
您是否尝试返回而不是中断?
-
是的,这是我首先尝试的。它只是打印所有结果而不是破坏它。
标签: php symfony domcrawler