простой HTML-дом и текст

предположим, что простой объект html dom включает в себя следующее

text1
<br />
<br />
<br />
text2
<br />

Как я могу получить любой из текстов, используя простой html dom?


person pouya    schedule 13.04.2012    source источник
comment
document будет корнем dom. Вам нужно пройти оттуда.   -  person kosa    schedule 13.04.2012
comment
@thinksteep, как я могу получить текстовые узлы с помощью обхода в этом случае???   -  person pouya    schedule 13.04.2012


Ответы (3)


Чтобы получить все простые текстовые элементы, вы можете использовать следующее:

$string="text1
<br />
<br />
<br />
text2
<br />";

$html = str_get_html($string);
$texts=$html->find('text');
foreach($texts as $elem_index => $text){
    echo $elem_index."=>".$text."<br>";
}

Ваш вывод должен выглядеть примерно так:

0=>text1
1=>
2=>
3=> text2 

В цикле foreach вы, очевидно, можете выполнять любую фильтрацию, которая вам нужна. Например, если вы пытаетесь найти текст, соответствующий определенной строке, вы можете просто сделать:

if (trim($text) == "text2")
    //do something

Итак, если вы хотите заменить найденный текст, вы можете использовать:

if (trim($text) == "text2")
    $texts[$elem_index]->innertext = "something else";
$html->save();

и $html будет содержать новый html.

person Steve    schedule 27.05.2012

Просто используйте открытый текст, чтобы получить текстовое значение из html.

$opts = array(
'http' => array(
    'method' => "GET",
    'header' => "Accept-language: en\r\n" .
        "User-Agent:    Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; 
         rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6\r\n" .
        "Cookie: foo=bar\r\n"
     )
  );

$context = stream_context_create($opts);

$html1 = new simple_html_dom();
$html1->load_file($url, false, $context);
$appName1 = $html1->find('tagname.classname or id', 0)->plaintext;

Для использования класса (tagname.classname) и использования идентификатора (tagname#id) для получения текста.

$context предназначен для установки заголовка для поддержки браузера, если какой-либо веб-сайт получит мобильную версию, поэтому вы можете добавить заголовок, чтобы получить контент поддержки браузера.

person Mokariya Sanjay    schedule 30.11.2017

С помощью jquery попробуйте $(document.body).contents();

Это должен вам массив узлов с text1 и text2 в качестве текстового узла.

person Ryan Fiorini    schedule 13.04.2012