Получить содержимое внутри div, но пропустить ‹span› внутри этого div simple_html_dom

Итак, у меня есть код, который находится внутри класса div, а внутри этого класса div есть текст и один диапазон с другим текстом, поэтому мне нужно получить контент, но не то, что находится внутри диапазона и диапазона.

В основном это код

<div class="somecontent">
    23:45
    <span>Tags:
      <a href="link to somewhere"> tag1</a>
      <a href="link to somewhere"> tag1</a>
      <a href="link to somewhere"> tag1</a>
    </span>
</div>

Так что мне не нужно то, что находится внутри пролета и этих ссылок. мне просто нужно иметь это

23:45

В основном мне просто нужно получить время видео.

И я захватываю страницы с помощью simple_html_dom, так что мое решение, если кто-нибудь знает?


person lonerunner    schedule 28.03.2014    source источник
comment
Проверьте следующий вопрос, на который отвечает @pguarianrio, который решил вопрос. stackoverflow.com/questions/ 22631484/   -  person Gunaseelan    schedule 29.03.2014
comment
Если вы предоставите URL-адрес, по которому вы очищаете данные, мы можем найти, где именно существует проблема?   -  person Gunaseelan    schedule 29.03.2014
comment
Я сделал что-то похожее на указанный вами URL. Я не уверен, должен ли я публиковать URL-адрес, так как это сайт для взрослых.   -  person lonerunner    schedule 30.03.2014
comment
Тогда не желательно давать.   -  person Gunaseelan    schedule 05.04.2014


Ответы (3)


Вы ищете:

$html->find('.somecontent text', 0);
person pguardiario    schedule 28.03.2014

Вы можете сделать следующее:

$doc = str_get_html($html);

foreach ($doc->find('div.somecontent') as $parent) {
    foreach ($parent->find('text') as $node) {
        if ($node->parent() === $parent) {
            echo trim($node->plaintext);
        }
    }
}

Это становится проще, если вы используете встроенный в PHP класс DOMDocument. Вы можете просто использовать выражение XPath для получения нужного текста:

$doc = new DOMDocument;
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);

foreach ($xpath->query('//div/text()') as $node) {
    echo trim($node->textContent);
}

Выражение XPath //div/text() находит все текстовые узлы, находящиеся внутри <div>.

person Amal Murali    schedule 28.03.2014
comment
Если вам иногда хочется использовать xpath с простым html-домом, вам может понравиться этот проект — он позволяет do: $doc->find('//div/text()') - Хотя лично я предпочитаю css. - person pguardiario; 29.03.2014

Это сработало для меня как решение.

Сначала я получаю весь текст внутри диапазона, затем я использую str_replace, чтобы получить весь текст внутри некоторого класса содержимого и заменить один внутри диапазона пустым.

                $get_duration = $video->find('div[class="somecontent"]', 0)->children(0);
                $video_duration = str_replace($get_duration, '', $video->find('div[class="somecontent"]', 0)->innertext);
person lonerunner    schedule 30.03.2014