Зависит, и, как обычно, есть много способов сделать это. В первую очередь это зависит от размера (фактического) файла. Если он большой, я бы порекомендовал использовать такой модуль, как XML :: Twig , чтобы разрезать его на более мелкие части перед анализом. Он маленький, как ваш файл примера, почти все, что нужно сделать. Например, XML :: LibXML :: XPathContext может сделать это следующим образом (примечание: вы сделаете все возможное, чтобы добавить некоторый код для проверки ошибок в синтаксический анализ и, возможно, заранее проверите xml):
#!/us/bin/perl
use warnings;
use strict;
use XML::LibXML;
use XML::LibXML::XPathContext;
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file('test.xml');
my @nodes = $doc->findnodes('//FAN/SPEED');
foreach my $node(@nodes){
printf("fan: %s %s\n", $node->getAttribute('VALUE'), $node->getAttribute('UNIT'));
}
, который дает этот вывод:
fan: 81 Percentage
fan: n/a n/a
fan: 81 Percentage
fan: n/a n/a
fan: 81 Percentage
fan: n/a n/a
Вам, вероятно, понадобится краткое введение в XPath