Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Чем просматривать большие XML файлы?
 
 автор: Eugene77   (13.01.2009 в 10:12)   письмо автору
 
 

PHPExpertEditor - не берёт. Слишком большой файл.
Чем тогда его открывать?
Желательно, чтобы XML подсвечивался и валидность проверялась

  Ответить  
 
 автор: Trianon   (13.01.2009 в 10:16)   письмо автору
 
   для: Eugene77   (13.01.2009 в 10:12)
 

браузер тоже не берет? :)

  Ответить  
 
 автор: Eugene77   (13.01.2009 в 11:00)   письмо автору
 
   для: Trianon   (13.01.2009 в 10:16)
 

Вот так совет!
Опера в начале стала показывать всё сплошным текстом, а потом зависла.
Пришлось её насильно выключать.

  Ответить  
 
 автор: coloboc66   (13.01.2009 в 11:37)   письмо автору
 
   для: Eugene77   (13.01.2009 в 11:00)
 

Зачем тогда вообще такой файл нужен? Если его и браузеры не берут...

  Ответить  
 
 автор: Eugene77   (13.01.2009 в 15:25)   письмо автору
 
   для: coloboc66   (13.01.2009 в 11:37)
 

>Зачем тогда вообще такой файл нужен? Если его и браузеры не берут...
XML - это не HTML.
XML вообще не для браузеров придуман. У него много разных применений.
Для браузеров есть XHTML, но это не мой случай.

Впрочем, возможно, какие-то браузеры могут и отображать XML, но я просто не в курсе.
Честно, говоря, о браузерах даже не подумал, они как-то отфильтровались сами собой из списка возможных претендентов в моей голове так как всегда считал, что браузеры изначально делались под маленькие файлы.

0.5Г - для них будет уже великоват, кажется.

  Ответить  
 
 автор: BinLaden   (13.01.2009 в 15:41)   письмо автору
 
   для: Eugene77   (13.01.2009 в 15:25)
 

Если файл такой большой, то скорее всего он не для ручной правки. Попробуйте распарсить (хорошее слово, верно?)

  Ответить  
 
 автор: Axxil   (13.01.2009 в 15:54)   письмо автору
 
   для: Eugene77   (13.01.2009 в 15:25)
 

А в какой области такие здоровые файлы используются, если не секрет?

Распарсить такой огромный файл сложновато будет. Надо все эти полгига в память загонять, либо писать какой-то хитрый алгоритм разбиения файла на более мелкие составляющие.

  Ответить  
 
 автор: BinLaden   (13.01.2009 в 15:56)   письмо автору
 
   для: Axxil   (13.01.2009 в 15:54)
 

> Надо все эти полгига в память загонять

С какой радости?

  Ответить  
 
 автор: Axxil   (13.01.2009 в 15:58)   письмо автору
 
   для: BinLaden   (13.01.2009 в 15:56)
 

Ну расскажи как правильно

  Ответить  
 
 автор: BinLaden   (13.01.2009 в 16:18)   письмо автору
 
   для: Axxil   (13.01.2009 в 15:58)
 

Представить в виде древа. Давать ссылки "ветви", как это обычно можно увидеть на сайтах с древовидной навигацией. Явно запихивать весь контент в память не будет нужно.

  Ответить  
 
 автор: Axxil   (13.01.2009 в 17:06)   письмо автору
 
   для: BinLaden   (13.01.2009 в 16:18)
 

А непосредственно парсить сам xml файл, чтобы "представить его в виде дерева" как будешь?

Насколько я понимаю, чтобы осуществлять навигацию по xml докумену (тот же xpath), в любом случае надо прочитать его весь в память для создания в ней удобной для навигации структуры (отбросить теги и создать массив или объект).

  Ответить  
 
 автор: Владимир55   (13.01.2009 в 20:04)   письмо автору
 
   для: Axxil   (13.01.2009 в 17:06)
 

Поскольку ТС не раскрыл секрета о том, для чего ему нужен такой большой файл и как он получается, то, может быть, мой совет его и не устроит.

А суть такая.

Если этот файл создается скриптом ТС, то можно формировать несколько менее крупных файлов непосредственно в процессе создания по аналогии с тем, как создается сайтмапа для большого сайта (через индекс).

Если же файл уже приходит в таком виде, то можно попробовать загнать его в программу формирования сайтемапы в папку готовых файлов и затем с помощью этой же программы переформировать в пакет файлов меньшего размера. Я это делал с файлами по 20-30 мбайт.

  Ответить  
 
 автор: Eugene77   (13.01.2009 в 21:16)   письмо автору
 
   для: Владимир55   (13.01.2009 в 20:04)
 

>
>Если же файл уже приходит в таком виде, то можно попробовать загнать его в программу формирования сайтемапы в папку готовых файлов и затем с помощью этой же программы переформировать в пакет файлов меньшего размера. Я это делал с файлами по 20-30 мбайт.

Проблема у меня возникает если файл приходит изначально крупненький.
В других ситуациях я своими силами справляюсь.

Хочется посмотреть его разметку, чтобы подумать как можно распарсить, хочется разрезать его на кусочки приемлемые для PHP итд, а чем это сделать - не понятно.

Что это за программа : "формирования сайтемапы"?

  Ответить  
 
 автор: Владимир55   (13.01.2009 в 21:29)   письмо автору
 
   для: Eugene77   (13.01.2009 в 21:16)
 

"Что это за программа : "формирования сайтемапы"?"
Да их много разных - в Гугле для ВЭБмастера есть ссылки. Что то типа вот этого http://www.microsystools.com/
Поскольку у меня с английским напряженка, то знакомство поверхностное - что-то скачал, попробовал и стер...

"Хочется посмотреть его разметку"
Но ведь для этого достаточно небольшого кусочка. Можно ДОСом отрезать.

А еще я иногда использую WordPad - он 3 гига открывает (по идее, не пробовал).

  Ответить  
 
 автор: ddhvvn   (13.01.2009 в 22:38)   письмо автору
 
   для: Владимир55   (13.01.2009 в 21:29)
 

WordPadом открывал файл размером 130Мб. Большего размера не требовалось, поэтому не знаю, но думаю откроет )

  Ответить  
 
 автор: Eugene77   (14.01.2009 в 13:14)   письмо автору
 
   для: ddhvvn   (13.01.2009 в 22:38)
 

>WordPadом открывал файл размером 130Мб. Большего размера не требовалось, поэтому не знаю, но думаю откроет )
Да WordPad открывает.
Но как-то не очень ...
Хотелось бы хотя бы подсветку.
Или он может, но я не знаю?

  Ответить  
 
 автор: Саня   (14.01.2009 в 13:47)   письмо автору
 
   для: Eugene77   (14.01.2009 в 13:14)
 

Попробуйте notepad++. Заявлено, что он "...базируется на компоненте Scintilla (очень мощном компоненте для редактирования) написанном на C++ с использованием только Win32 API и STL (что гарантирует максимальную скорость выполнения при минимальном размере программы)..."

  Ответить  
 
 автор: BinLaden   (13.01.2009 в 22:16)   письмо автору
 
   для: Axxil   (13.01.2009 в 17:06)
 

> А непосредственно парсить сам xml файл, чтобы "представить его в виде дерева" как будешь?

Важно не то как

> в любом случае надо прочитать его весь в память

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

  Ответить  
 
 автор: Axxil   (14.01.2009 в 09:24)   письмо автору
 
   для: BinLaden   (13.01.2009 в 22:16)
 

Ладно.

Дано: 0.5 Гб xml файл и любой язык программирования без библиотек работы с xml.

Задача: вывести элемент максимального уровня вложенности.

Ограничения сервера - 32 Мб оперативной памяти.

Как будешь решать?

Естественно полностью программу писать не надо. Интересует алгоритм действий.

  Ответить  
 
 автор: Trianon   (14.01.2009 в 09:43)   письмо автору
 
   для: Axxil   (14.01.2009 в 09:24)
 

Замечательная задача.
Может в задачи её?

  Ответить  
 
 автор: Axxil   (14.01.2009 в 10:44)   письмо автору
 
   для: Trianon   (14.01.2009 в 09:43)
 

Я только за.
Мне интересно кто какой алгоритм предложит.
Только вот как будет оцениваться скорость, работоспособность алгоритмов без тестов?

  Ответить  
 
 автор: BinLaden   (14.01.2009 в 13:31)   письмо автору
 
   для: Axxil   (14.01.2009 в 10:44)
 

Без тестов -- никак. Поэтому будут тесты :)

  Ответить  
 
 автор: Саня   (14.01.2009 в 15:30)   письмо автору
 
   для: Trianon   (14.01.2009 в 09:43)
 

Я уже написал решение. На файле google.com/sitemap.xml выполняется за 6 секунд. На 500 МБ файле будет примерно 13 минут.

  Ответить  
 
 автор: Axxil   (14.01.2009 в 16:09)   письмо автору
 
   для: Саня   (14.01.2009 в 15:30)
 

На каком языке?
На какой машине выполняется?

  Ответить  
 
 автор: Саня   (14.01.2009 в 16:19)   письмо автору
 
   для: Axxil   (14.01.2009 в 16:09)
 

PHP 5.2.6, Apache 2.2.9. Машина WinXP Pro SP2, Celeron D 2,93 ГГц, 512 МБ ОЗУ.
А что, на язык ограничений нет?

  Ответить  
 
 автор: Axxil   (14.01.2009 в 16:27)   письмо автору
 
   для: Саня   (14.01.2009 в 16:19)
 

>А что, на язык ограничений нет?

Есть ограничение на память сверху (32 Мб) и размер файла снизу (500 Мб).

> На 500 МБ файле будет примерно 13 минут.
Такая экстраполяция вряд ли верна. Так как отличное выполнение на маленьком файле не страхует от ошибок нехватки памяти для больших.

Попробуйте сгенерировать xml файлик в полгига и разобрать его вашим решением для выставленных для php ограничений memory_limit = 32 Мб. Если получится, то решение правильное.

  Ответить  
 
 автор: Саня   (14.01.2009 в 16:34)   письмо автору
 
   для: Axxil   (14.01.2009 в 16:27)
 

Мне кажется зависимость линейная. Алгоритм итерационно считывает по килобайту из файла и разбирает. Кстати, от размера считываемой строки на зависит общая скорость отработки (по крайней мере находится в пределах погрешности измерений на 4 МБ файле). Сейчас попробую сгенерировать огромный XML и протестировать на нём.

  Ответить  
 
 автор: Саня   (14.01.2009 в 18:03)   письмо автору
 
   для: Саня   (14.01.2009 в 16:34)
 

Итак. Весь апач занимал в памяти 4600 КБ и потреблял 98% процессора. Однако это не мешало мне слушать винамп, серфить интернет в опере на 15 вкладках, кодить в eclipse... и делать всё это с комфортом. Директива memory_limit = 32M
+-------------------+--------------------+
| Размер файла (МБ) | Время поиска (сек) |
+-------------------+--------------------+
| 4                 | 6                  |
| 215               | 459                |
| 545               | 1217               |
+-------------------+--------------------+

  Ответить  
 
 автор: Axxil   (15.01.2009 в 14:18)   письмо автору
 
   для: Саня   (14.01.2009 в 18:03)
 

скрипт не покажете?

  Ответить  
 
 автор: BinLaden   (15.01.2009 в 18:06)   письмо автору
 
   для: Axxil   (15.01.2009 в 14:18)
 

Может все-таки задачу сделаем?

  Ответить  
 
 автор: Axxil   (15.01.2009 в 21:38)   письмо автору
 
   для: BinLaden   (15.01.2009 в 18:06)
 

Хеопса нету :(

  Ответить  
 
 автор: Саня   (16.01.2009 в 11:06)   письмо автору
 
   для: Axxil   (15.01.2009 в 14:18)
 

Если до понедельника не будет задачи, то покажу.

  Ответить  
 
 автор: Trianon   (16.01.2009 в 11:11)   письмо автору
 
   для: Саня   (16.01.2009 в 11:06)
 

Её и не будет, если никто не возьмет на себя труд составить формальное условие и объявить регламент ( формат ответов, методика оценки, срок подведения итогов. )

  Ответить  
 
 автор: BinLaden   (16.01.2009 в 12:10)   письмо автору
 
   для: Trianon   (16.01.2009 в 11:11)
 

Боюсь, это не в компетенции "простых смертных".

  Ответить  
 
 автор: Trianon   (16.01.2009 в 12:23)   письмо автору
 
   для: BinLaden   (16.01.2009 в 12:10)
 

было бы желание

  Ответить  
 
 автор: Саня   (16.01.2009 в 12:39)   письмо автору
1.8 Кб
 
   для: Trianon   (16.01.2009 в 11:11)
 

Ну тогда вот.

  Ответить  
 
 автор: Axxil   (16.01.2009 в 12:57)   письмо автору
 
   для: Саня   (16.01.2009 в 12:39)
 

хм...
код странный.

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

  Ответить  
 
 автор: Саня   (16.01.2009 в 14:13)   письмо автору
 
   для: Axxil   (16.01.2009 в 12:57)
 

Там в коде есть флаг на этот случай.

  Ответить  
 
 автор: coloboc66   (13.01.2009 в 17:39)   письмо автору
 
   для: Eugene77   (13.01.2009 в 15:25)
 

XML вообще не для браузеров придуман. У него много разных применений. - Просветите пожалуйста, для чего он придуман и какие у него ещё применения. Я так полагаю, что придуман он как-раз для браузеров, а вот потом его стали применять куда попало...

  Ответить  
 
 автор: Eugene77   (14.01.2009 в 13:03)   письмо автору
 
   для: coloboc66   (13.01.2009 в 17:39)
 

Приведу цитату из статьи "XML в 10 тезисах":

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

  Ответить  
 
 автор: coloboc66   (15.01.2009 в 09:34)   письмо автору
 
   для: Eugene77   (14.01.2009 в 13:03)
 

ИМХО: Так вот XML и разрабатывался в качестве альтернативы базам данных (наподобие mysql) для отображения этих данных в браузере (конечно с помощью скриптов). Ни разу не встречал XML, ни каким боком не связанный с интернетом. XML - это язык размётки данных, а XTML - язык размётки веб-страницы. Это совсем разные вещи, но обе предназначены для браузеров.

  Ответить  
 
 автор: xx7   (13.01.2009 в 20:10)
 
   для: Eugene77   (13.01.2009 в 15:25)
 

резать , каким-нибудь while(.... fgets(....
и можно будет всем чем хочется просмотреть ,а потом можно обратно склеить при желании

  Ответить  
 
 автор: mashaterenteva   (10.10.2015 в 00:10)   письмо автору
 
   для: Eugene77   (13.01.2009 в 10:12)
 

>PHPExpertEditor - не берёт. Слишком большой файл.
>Чем тогда его открывать?
>Жтелелаьно, чтобы XML подсвечивался и валидность проверялась



Я советую посмотреть здесьhttp://geek-nose.com/chem-otkryt-xml-fajl-5-luchshix-programm/.Я тоже не могла открыть,был тоже большой файл,полазила по форумам и нашла эту ссылку и пять минут работы и все,и это учитывая что я девушка)))))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования