2010-12-29 1 views
1

У меня есть XML-файл. В файле есть пустая строка. Как удалить только пустые строки? Я попробовал метод chomp() и обнаружил, что он удалит все новые строковые символы. Мне все еще нужно вывести стандартный формат XML-файла.Использование chomp() в Perl

while(my $line = <$fh>) { 

     #chomp($line); 
     #$line =~ s/\s+//g; 
     print $line; 
} 

__DATA__ 
    <item> 

     <key>AB</key> 

     <info> 

     <format>10</format> 

     <description>Any binary string</description> 

     <value>NA</value> 

     <whereUsed>A2B25,A2B26</whereUsed> 

     </info> 

    </item> 

Выходная форма ниже ожидаемого.

<item> 
    <key>AB</key> 
    <info> 
    <format>10</format> 
    <description>Any binary string</description> 
    <value>NA</value> 
    <whereUsed>A2B25,A2B26</whereUsed> 
    </info> 
</item> 

ответ

8

В вашем цикле, перед печатью:

next unless $line =~ /\S/; 
+0

Это работает очень хорошо. Спасибо. –

3

Вы можете напечатать строку, только если он имеет не-пробел:

while(my $line = <DATA>) { 
     print $line if ($line=~/\S/); 
} 
+1

Я большой поклонник использования '$ _' в этом случае. –

2

Я честно не рекомендую делая это с помощью chomp и вместо этого просто разбирайте и переформатируйте свой XML с помощью синтаксического анализатора.

use XML::Twig; 
XML::Twig->new('pretty_print' => 'indented_a')->parse(\*DATA)->print; 

Это считывает, проверяет ваш XML и переформатирует выход.