У меня есть HTML на моем сайте (http://testsite.com/test.php):
<div class="first">
<div class="second">
<a href="/test.php">click</a>
<span>back</span>
</div>
</div>
<div class="first">
<div class="second">
<a href="/test.php">click</a>
<span>back</span>
</div>
</div>
Я хотел бы получить:
<div class="first">
<div class="second">
<a href="/test.php">click</a>
</div>
</div>
<div class="first">
<div class="second">
<a href="/test.php">click</a>
</div>
</div>
Так что я хотел бы удалить span.
Я использую Goutte в Symfony2 на основе http://symfony.com/doc/current/components/dom_crawler.html :
$client = new Client();
$crawler = $client->request('GET', 'http://testsite.com/test.php');
$crawler->filter('.first .second')->each(function ($node) {
//??????
});
Компонент DomCrawler облегчает навигацию по DOM для документов HTML и XML.
а также:
Хотя это возможно, компонент DomCrawler не предназначен для манипулирования DOM или повторного дампа HTML / XML.
DomCrawler предназначен для извлечения деталей из документов DOM, а не для их изменения.
Тем не мение…
Поскольку PHP передает объекты по ссылке, и Гусеничный трактор в основном это обертка для DOMNodes, технически возможно изменить базовый документ DOM:
// will remove all span nodes inside .second nodes
$crawler->filter('html .content h2')->each(function (Crawler $crawler) {
foreach ($crawler as $node) {
$node->parentNode->removeChild($node);
}
});
Вот рабочий пример: https://gist.github.com/jakzal/8dd52d3df9a49c1e5922
To remove a node the anonymous function must return false.
Просто верните false внутри замыкания, и узел $ будет удален.