| imho.ws |
![]() |
|
|
|
# 4 | |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Что значит разбить по тегам?? Вам нужно получить валидные куски меньшего размера? Структура документа это позволяет? Что за XML-то? Ну и самое главное, зачем это все? Если речь действительно идет о загрузке его потом в БД, то наверное лучше и вправду его открыть, отмапить в память, читать постепенно и загружать в БД, вот и все.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|
|
|
|
# 7 |
|
Newbie
Регистрация: 08.09.2004
Сообщения: 49
![]() |
пока вот возился, подкинули идейку с перлом
благо у меня сервак готов, Код:
#!C:/Server/Perl/bin/perl.exe
use strict;
use warnings;
no warnings 'uninitialized';
use XML::Rules;
die "Usage: $0 split_tag filename(s)\n" unless @ARGV >= 2;
my ($split_tag, @files) = @ARGV;
my $parser = XML::Rules->new(
rules => [
_default => 'raw',
$split_tag => sub {
my ($file, $id) = ( $_[4]->{parameters}{'file'}, ++$_[4]->{parameters}{'id'});
$id = sprintf "%04d", $id;
$file =~ s/(?:\.xml)?$/-$id.xml/i;
if (ref $_[3]->[-1]{_content}) {
$_[3]->[-1]{_content}[-1] =~ s/^.*(\n[^\n]+)$/$1/s;
} else {
$_[3]->[-1]{_content} =~ s/^.*(\n[^\n]+)$/$1/s;
}
print " $file\n";
open my $FH, '>:utf8', $file or die qq{Can't create "$file": $^E\n};
print $FH $_[4]->parentsToXML();
print $FH $_[4]->ToXML( $_[0], $_[1]),"\n";
print $FH $_[4]->closeParentsToXML();
close $FH;
return;
}
]
);
foreach my $file (@files) {
$parser->parsefile( $file, {file => $file});
}
spliter.pl split_tag C:\filename.xml заменяем split_tag на тег (просто слово) и данные в этом теге будут разрезаны на файлы, все будет закрыто, и без ошибок, и всего за пару секунд. спасибо всем
|
|
|