Как мне установить формат остальной части файла XML? - PullRequest
1 голос
/ 31 октября 2011

У меня есть файл XML, и я использую следующий код для его анализа:

open( $filehandle, "+<$path") or die "cannot open out file out_file:$!";
my $roots = { tag1 => 1 };
my $handlers = { 'tag0/tag1' => $tweak_server,
               };
my $twig = new XML::Twig(TwigRoots                => $roots,
                         TwigHandlers             => $handlers,
                         pretty_print             => 'indented',
                         twig_print_outside_roots => \*$filehandle
                        );
$twig->parsefile($path);
$twig->flush($filehandle, pretty_print => 'indented');
close $filehandle;

В выводе формат всех частей tag1 хороший. Они просто в оригинальном формате, но остальная часть файла не отформатирована. Между тегами есть несколько пустых строк, более того, к текстовому содержимому внутри элемента добавляются пустые строки, которых там быть не должно.

Есть ли способ проанализировать оставшуюся часть XML-файла в исходном формате?

1 Ответ

0 голосов
/ 23 декабря 2011

Ваш XML действителен (это не HTML, не так ли ?!)?Некоторые примеры XML ввода / вывода были бы действительно полезны.

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

sub readxml {
    my ($fh) = @_;
    local $/;
    my $xml = <$fh>;
    $xml =~ s/\n+/\n/g;
    return $xml;
}

#
$twig->parse(readxml($filehandle));

Далее, я не думаю, что twig будет довольно печатать контент, который проходит через twig_print_outside_roots.Однако вы можете либо удалить TwigRoots, либо добавить дополнительные обработчики, чтобы получить оставшийся контент (или использовать обработчик _default_) - таким образом он получит симпатичную обработку печати, как и все другие узлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...