Парсинг с помощью simple_html_dom

Я пытаюсь очистить это:

<a id="pa1">Site1</a>
<font size="-1">Text1</font><br />
<font size="-1" color="green">Text2</font><br />

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

$html = new simple_html_dom();
$html->load($document);

foreach ($html->find('#pa1>font') as $e) {
    $this->check_line_two = $this->process_array_elements($e->innertext);
}

foreach ($html->find('#pa1>font>font') as $e) {
    $this->check_line_three = $this->process_array_elements($e->innertext);
}

Оба не работали. Как я могу получить следующий элемент с помощью простого html-дома?


person Dmitry Makovetskiyd    schedule 29.08.2012    source источник


Ответы (3)


Как сказал Feela, эти элементы шрифта не являются потомками привязки. Попробуйте что-то вроде этого:

foreach ($html->find('#pa1') as $e) {
    $firstFontElement = $e->next_sibling();
}
person Daniel Sloof    schedule 29.08.2012
comment
Спасибо .. Я думаю, это было лучшее решение - person Dmitry Makovetskiyd; 29.08.2012

В #pa1 нет потомка font-тега.

То, что вы, очевидно, ищете, это родственный селектор +: #pa1 + font. Но я не знаю, поддерживается ли она библиотекой, которую вы используете.

Прочтите их документацию: http://simplehtmldom.sourceforge.net/manual.htm.

person feeela    schedule 29.08.2012
comment
@Dmitry Makovetskiyd Что тебя не устраивает? Документы читаете? - person feeela; 29.08.2012

Если это все, что вы пытаетесь удалить, почему бы вам просто не выбрать тег шрифта.

foreach ($html->find('font') as $e) {
    $this->check_line_two = $this->process_array_elements($e->innertext);
}

Или есть вероятность, что в документе присутствует больше тегов шрифта?

person Awemo    schedule 29.08.2012
comment
у вас может быть более одного шрифта в документе - person Dmitry Makovetskiyd; 29.08.2012