PHP. Удалить содержимое заданных блоков в HTML-документе.

12
mfl
На сайте с 16.10.2006
Offline
134
mfl
6015

Есть HTML-документ:

<div class="a1">текст1<div class="a2">текст2<div class="a1">текст3</div>текст4</div>текст5</div>

Необходимо удалить всё содержимое <div class="a2">, т.е. в итоге должен получиться следующий код:

<div class="a1">текст1текст5</div>

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

Как рациональнее решить данную задачу на PHP?

Заранее спасибо.

Dimoha
На сайте с 15.06.2009
Offline
53
#1

а текст2 разве не содержимое <div class="a2">? как же оно в результат попасть должно?

Drivelink (http://drivelink.ru/for/support/) - автоматическая проверка ссылок
mfl
На сайте с 16.10.2006
Offline
134
mfl
#2

Dimoha, спасибо, не заметил.

Сейчас все правильно.

akaplenko
На сайте с 09.09.2009
Offline
48
#3

ТОлько разбором этого в дом модель и уже по ней.

mfl
На сайте с 16.10.2006
Offline
134
mfl
#4

т.е. просто регулярками ни как?

akaplenko
На сайте с 09.09.2009
Offline
48
#5

Yу сам подумай, как ты произвольную вложенность регулярками вычислишь?

Dimoha
На сайте с 15.06.2009
Offline
53
#6

под частный случай можно и регулярками наверное, но сделать универсальный метод - пожалуй тока dom

Dimoha
На сайте с 15.06.2009
Offline
53
#7

мда. куда уж универсальнее))

Dimoha
На сайте с 15.06.2009
Offline
53
#8

не. как тока строку усложнить это все сломается

например так

<body><div class="a1">текст1<div class="a2">текст2<div class="a1">текст3</div>текст4</div>текст5</div><div class="a4">bla</div></body>

Z
На сайте с 22.07.2010
Offline
39
#9

Эм, зачем извращения с str_ ?

Используйте DOM объекты.

Для облегчения - http://simplehtmldom.sourceforge.net/

Пример по див конструкции:


include "либа_дума.php";

$main = file_get_html("файл с дивами");

$preparse = $main->find('div[class=a]');
foreach($preparse as $value) {
// тут ищите нужные вхождения $value
}

Где то примерно так ... см. либу.

[Удален]
#10

c помощью getElementsByTagName() найти все элементы div. Каждый элемент дива проверить getAttribute() на наличие class="a2" (это будет кроссбраузерно, так как getElementsByClassName() работает не кроссбраузерно). Мы нашли нужный узел, дальше находим его parent и удаляем ребенка с помощью element.removeChild(). Все.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий