Что мой эмулятор терминала должен делать с управляющими кодами DC1?

Пожалуйста, не используйте регулярные выражения на основе решение, например awk или sed .

XML является контекстным, в то время как регулярные выражения не являются - , поэтому они НИКОГДА не могут работать должным образом, это в лучшем случае лишь небольшая хитрость .

Но у XML есть решение этой проблемы - он называется xpath , что позволяет «искать» контекстным способом.

Итак, возьмем ваш пример:

#!/usr/bin/perl

use warnings;
use strict;
use XML::Twig;

my $xml = XML::Twig -> new -> parsefile('your_file.xml'); 

foreach my $wpt ( $xml -> get_xpath('//wpt') ) {
   print join ",", $wpt -> att('lat'), 
                   $wpt -> att('lon'),
                   $wpt -> first_child_text('time'), "\n";
}

Что дает желаемый результат, но также будет обрабатывать множество совершенно корректных и семантически идентичных форм вашего XML.

Как с отступом:


  
    
  
  
    
  
  
    
  

Все в одной строке:


Другой стиль отступа:


  
    
  
  
    
  
  
    
  

Или даже:


Все они семантически идентичны, и следует анализировать одинаково способ. Надеюсь, совершенно ясно, что регулярное выражение для этого НАМНОГО сложнее, чем использование парсера XML.

Для краткости:

perl -MXML::Twig -0777 -e 'XML::Twig->new(twig_handlers=>{wpt=>sub{print join ",", $_->att("lat", $_->att("lon"),$_->first_child_text("time"), "\n" }})->parse(<>)'

1
31.01.2016, 07:58
0 ответов

Теги

Похожие вопросы