handle_char печатать current_element несколько раз - PullRequest
0 голосов
/ 18 марта 2020

Я анализирую этот XML файл, используя XML::Parser

  <SOURCE>
     <FILTER>
         <FILTER_CODE_SHELL append="true">
            ECHO HELLO
         </FILTER_CODE_SHELL>
     </FILTER>
  </SOURCE>

в perl У меня есть это:

        $p = new XML::Parser(ErrorContext => 2,
                         Handlers => {#Init => \&handle_init,
                                      #Start => \&handle_start,
                                      Char  => \&handle_char,
                                      #End   => \&handle_end,
                                      #Proc  => \&handle_proc,
                                      #Final => \&handle_final
                                      });

Я просто комментирую всех Гандлеров, ожидающих Char ,

это подпрограмма handle_char:

sub handle_char {
 my ($p, $data) = @_;

 if (uc($p->current_element) eq 'FILTER_CODE_SHELL') {
       $FILTER_CODE .= $data;
       print STDOUT $p->current_element."\n";
    }
  }

Проблема заключается в том, что я печатаю текущий_элемент, который он печатает FILTER_CODE_SHELL 4 раза!

Print log Результаты:

Date : 18/03/2020 11:40:32 >>   FILTER_CODE_SHELL
Date : 18/03/2020 11:40:32 >>   FILTER_CODE_SHELL
Date : 18/03/2020 11:40:32 >>   FILTER_CODE_SHELL
Date : 18/03/2020 11:40:32 >>   FILTER_CODE_SHELL
...