2016-01-28 4 views
0

Я пытался выяснить, как объединить два фрагмента извлеченного текста в один результат (массив). В этом случае название и подзаголовок из разных книг.Как объединить текстовый узел из двух частей извлеченных данных с помощью Goutte/Domcrawler

<td class="item_info"> 
    <span class="item_title">Carrots Like Peas</span> 
    <em class="item_subtitle">- And Other Fun Facts</em> 
</td> 

Ближайший я был в состоянии получить это:

$holds = $crawler->filter('span.item_title,em.item_subtitle'); 

Что мне удалось вывести следующим:

$holds->each(function ($node) { 
    echo '<pre>'; 
    print $node->text(); 
    echo '</pre>'; 
}); 

и результаты в

<pre>Carrots Like Peas</pre> 
<pre>- And Other Fun Facts</pre> 

Другая проблема заключается в том, что не все книги hav e субтитров, поэтому мне нужно избегать объединения двух названий вместе. Как я мог бы объединить эти два в один результат (или массив)?

ответ

0

В моем случае я взял круговую дорогу, чтобы добраться туда, где я хотел быть. Я отступил на один уровень в DOM до тега td и схватил все и сбросил его в массив.

Я понял, что документация DomCrawler содержит код примера для размещения текстовых узлов в массиве.

$items_out = $crawler->filter('td.item_info')->each(function (Crawler $node, $i) { 
    return $node->text(); 
}); 

Я попытался избежать захвата td, потому что автор был также включен в этих клетках. После того, как еще более копаний, я был в состоянии лишить автор из массива со следующим:

foreach ($items_out as &$items) { 
    $items = substr($items,0, strpos($items,' - by')); 
} 

Просто взял меня пять дней, чтобы получить все это разобрали. Теперь о следующей проблеме!