Есть ли быстрый способ перейти к элементу с помощью XMLReader? - PullRequest
1 голос
/ 15 апреля 2010

Я использую XMLReader для чтения большого файла XML с около 1 миллиона элементов на уровне, с которого я читаю.Тем не менее, я рассчитал, что это займет более 10 секунд, когда я перейду к-например, элементу 500.000, используя XMLReader::next ([ string $localname ] ) или XMLReader::read ( void )

.Есть ли более быстрый способ сделать это?

Ответы [ 2 ]

1 голос
/ 15 апреля 2010

Нет быстрого способа сделать это.XML по своей природе медленен для случайных обращений, и нет пути его обойти.

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

0 голосов
/ 12 февраля 2013

Вам разрешено изменять базу данных? Если вы можете, я бы добавил тег и затем использовал ReadToFollowing, чтобы перейти к точке.

...