2015-10-10 3 views
1

Как получить текстовое значение, где <span>Your name:<span> с помощью простого HTML-анализатора HTML DOM без команды детей?

Получить текстовое значение с помощью PHP простого анализатора HTML DOM

<div class="adds-info"> 
    <span>price:<span>1000000000 </span></span> 
    <span>txt1</span> 
    <span>Your name:<span>aaa</span></span> 
    <span>Phone:<span>02632402210</span></span> 
</div> 

PHP simple HTML DOM parser api

+0

Да это работает в CSS, но мне нужно это в PHP простой HTML DOM. – Nima

+0

Вы имеете в виду? цена:

+0

По-видимому, такие вещи, как ': first-child', не поддерживаются. Вы можете сделать что-то вроде '$ simpledomobject-> find (". Add-info span span ", 1)', это поможет? Чтобы напечатать текст, вы бы выполнили 'echo $ simpledomobject-> find (". Add-info span span ", 1) -> innertext;' –

ответ

0

Спасибо определяет, я стараюсь этим и работает

$spans = '.adds-info span'; 
foreach($spans as $n){ 
         if (strpos($n->innertext, "Your name:") !== FALSE) { 
          $name = $n->innertext; 
          $name = str_replace('Your name:', '', $name); 
          echo "Name: " . $name . "<hr>"; 
         } 
        } 
+1

Этот код не работает. У этого есть foreach, итерация по строке. – defines

+0

Я обновил код. – Nima

+0

Это не совсем так. Он по-прежнему повторяется над строкой, что невозможно ... – defines

2

Предполагая, что HTML в вашем посте в переменной $str, это довольно просто:

// Parse the HTML string into a DOM object 
$html = str_get_html($str); 

// Find the second nested span inside the <div class="adds-info">, then get its parent 
$span = $html->find('.adds-info span span', 1)->parent; 

// Get the innerhtml of the parent span 
$name = $span->innertext; 

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

// Get all spans inside the <div class="adds-info"> 
$spans = $html->find('.adds-info span'); 

// Loop through each span, looking for "Your name:" 
foreach ($spans as $span) { 
    if (strpos($span->innerhtml, "Your name:") !== FALSE) { 
     $name = $span->innerhtml; 
    } 
} 
+0

Я повторил свой вопрос с небольшим изменением в моем выражении. Мне нужно получить текст после [span = Ваше имя]. Значение Span должно быть равно [span = Ваше имя]. извините за мой английский – Nima

+0

Я обновил свой ответ, но почему вы не хотите использовать функцию children? – defines

+0

Не потому, что число детей варьируется, мне нужен внешний текст Ваше имя: (AAA) – Nima

Смежные вопросы