Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Преобразование хтмл файла

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: как правильней сделать?
Yappa
Отправлено: 04 Июня, 2008 - 16:14:57
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Июнь 2008  


Помог: 0 раз(а)




Привет!
У меня есть такая задача:
1) пользователь загружает на сервер хтмл файл. (это понятно как делать)
2) пхп скрипт читает загруженный файл, изменяет его и выводит измененную версию.

Загружаемый файл кроме "шапки" пары вступлений и тд содержит в себе табличку.
Необходимо некоторые столбцы таблицы удалить вообще, содержимое определенных ячеек преобразить и тп. а пользователю показать уже мое оформление и измененную под мой вкус таблицу..

к примеру исходный вид одной строки исходной таблички такой:
(в ячейках таблицы какие-то данные, в скобках я просто обозвала их чтобы показаь что с ними потом делать)
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <tr>
  3.     <td>{from}</td>
  4.     <td>{to}</td>
  5.     <td>{nyo}</td>
  6.     <td>{nyo?!}</td>
  7.   </tr>


а моя табличка должна содержать чтото вроде
CODE (text):
скопировать код в буфер обмена
  1. <tr>
  2.     <td>{from}.{хитрые штуки}</td>
  3.     <td>{to}</td>
  4.     <td>{nyo}*28-42.{desu}</td>
  5.     <td>картинка</td>
  6.     <td>вообще новые данные</td>
  7.     <td>и чтото вроде {nyo?!}{to}{from}</td>
  8.   </tr>


как это лучше делать если:
1) таблица может содержать и 40 и 40000 строк - предугадать нельзя ) Такчто сразу грузить файл в массив или читать целиком нельзя.
2) файл генерируется абсолютно сторонней программой, тоесть при создании в нем нельзя поставить никаких "меточек" для упрощения разбора..
3) Страница всегда разная по содержанию, но одинакова по структуре.
4) переносы строки в файле (не <БР> а в коде) могут быть вразброс.
5) до таблицы есть некоторые нужные мне данные! их тоже надо выдрать
трудность собственно в том - как определить где в файле что написано и убедиться что у меня в руках цельная строка таблицы и ее можно править )

Как это дело парсить? как я представляю это :
нахожу в теле <body>, дальше ищу элементы обрамленными известными мне тегами и "на веру" принимаю их последовательно как нужные мне элементы..
Можно составить большое регексп выражение и читать файл по символу "примеривая" к шаблону прочитанное - а как совпадет - разбирать.. далее искать следующий кусок и тп... но схема подобной штуки для меня представляется уж больно сложновато...

Какие есть другие подходы? Или может какая-нить готовая технология существует? )

(Отредактировано автором: 04 Июня, 2008 - 17:16:27)

 
 Top
valenok Модератор
Отправлено: 04 Июня, 2008 - 17:09:01
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Вам пожоже везде нужно просто заменить
{from} на какуюто другую запись.
str_replace


-----
Truly yours, Sasha.
 
My status
 Top
Yappa
Отправлено: 04 Июня, 2008 - 17:12:46
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Июнь 2008  


Помог: 0 раз(а)




valenok пишет:
Вам пожоже везде нужно просто заменить
{from} на какуюто другую запись.
str_replace


нет нет нет, это я просто обозначила, что в данной ячейке будет некое значение которое означает "от".

Файл не шаблон - он уже с данными.
 
 Top
valenok Модератор
Отправлено: 04 Июня, 2008 - 20:33:39
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Так я не понял, исходный файл, который тебе загружают
может выглядеть так:

Вариант А
CODE (text):
скопировать код в буфер обмена
  1. <tr>
  2. <td>Коля</td>
  3. <td>Петя</td>
  4. <td>Вася</td>
  5. <td>Мася</td>
  6. </tr>


Вариаент Б
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <tr>
  3. <td>Коля.Инокентий</td>
  4. <td>Петя</td>
  5. <td>Вася*28-42.Мася</td>
  6. <td>картинка</td>
  7. <td>вообще новые данные</td>
  8. <td>и чтото вроде КоляВасяПетя</td>
  9. </tr>


И тебе нужно из варианта А получиьт вариант Б ?

В первй строке всегда поле ОТ
во второй строке всегда КОМУ и т.д. ?

Или там может быть как попало ?
Тут никак не определешь.
Только если хотябы помечаться будут <td id='from'>..</td>


-----
Truly yours, Sasha.
 
My status
 Top
scuter
Отправлено: 04 Июня, 2008 - 22:06:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 282
Дата рег-ции: Янв. 2008  


Помог: 0 раз(а)




можно через регулярное выражение,
я как то раз это делал так.
'|<tr[^>]*>(.*)</tr>|siU'
 
 Top
Yappa
Отправлено: 05 Июня, 2008 - 09:30:32
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Июнь 2008  


Помог: 0 раз(а)




valenok пишет:
И тебе нужно из варианта А получиьт вариант Б ?

В первй строке всегда поле ОТ
во второй строке всегда КОМУ и т.д. ?


Да да! Именно так!

valenok пишет:
Только если хотябы помечаться будут <td id='from'>..</td>


Как я уже писала, "2) файл генерируется абсолютно сторонней программой, тоесть при создании в нем нельзя поставить никаких "меточек" для упрощения разбора.." -_-

scuter пишет:
можно через регулярное выражение,
я как то раз это делал так.
'|<tr[^>]*>(.*)</tr>|siU


А у вас не осталось кусочка кода разбора? ^_^
 
 Top
Yappa
Отправлено: 06 Июня, 2008 - 12:09:50
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Июнь 2008  


Помог: 0 раз(а)




вопрос решен, спасибо )
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB