2012-06-25 2 views
0

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

my @findxmls; 
foreach my $searchxml(keys %xmlhash) { 
@findxmls= `find -name $findxml -maxdepth 4`; 
print Dumper (@findxmls); 

до этого момента хорошо работает. он распечатывает все xml-файлы с помощью пути.

example of output 
    y:\dir\subdir\procedure.xml 
    y:\dir\otherdir\java.xml 

, но он не работает, если я пытаюсь разобрать его

foreach my $output (@findxmls) {       
    my $parsexml = new XML::Simple; 
     my $xmldata = $parser->XMLin($output); 
    print Dumper ($xmldata); 
    } 

ОШИБКА

File does not exist: y:/dir/subdir/procedure.xml at sample.pl line 20 
+0

Вы должны предоставить по крайней мере, одно фактическое имя файла или часть реального объема производства. – simbabque

ответ

2

Обратные кавычки включают переводы строк (\n) в выходном сигнале, так что содержимое вашей @findxmls массива у всех есть символы новой строки. Измените свой скрипт либо

chomp(@findxmls= `find -name $findxml -maxdepth 4`); 

или

foreach my $output (@findxmls) { 
    chomp($output); 
    ... 
} 
+0

ehh, спасибо. еще один вопрос вы бы рекомендовали использовать chomp все время? – upstream

+0

используйте 'chomp', когда вы ожидаете, что ваш ввод будет иметь символы новой строки - скажем, из обратных ссылок или чтения из дескриптора файла - и вы хотите, чтобы на входе не было новых строк. – mob

Смежные вопросы