Показать сообщение отдельно
Старый 22.11.2008, 21:58     # 7
FELARMANIA
Newbie
 
Регистрация: 08.09.2004
Сообщения: 49

FELARMANIA Путь к славе только начался
пока вот возился, подкинули идейку с перлом
благо у меня сервак готов,

Код:
#!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 на тег (просто слово) и данные в этом теге будут разрезаны на файлы, все будет закрыто, и без ошибок, и всего за пару секунд.

спасибо всем
FELARMANIA вне форума