#!/usr/bin/perl -- use strict; use warnings; use autodie; use XML::Twig; Main( @ARGV ); exit( 0 ); sub Main { parseJmeter( \*DATA, \*STDOUT ); # DEMO } sub parseJmeter { my( $inFilenameOrHandle, $outHandle ) = @_; my( $error, $value, $failure, $failureMessage ) = ("") x 4; # INIT TO EMPTY my $t = XML::Twig->new( twig_handlers => { 'failure' => sub { warn $_->path; $failure = $_->text; }, 'failureMessage' => sub { warn $_->path; $failureMessage = $_->text; }, 'error' => sub { warn $_->path; $error = $_->text; }, '/*/*//httpSample' => sub { warn $_->path; ## children $value .= $_->att('lb') . "\n"; }, '/*/httpSample' => sub { # TRIGGERED LAST, the daddy httpSample warn 'YO ', $_->path; $value .= $_->att('lb') . "\n"; ## append print $outHandle qq{

$value

$failure

$failureMessage

}; ( $error, $value, $failure, $failureMessage ) = ("") x 4; # RESET TO EMPTY }, }, ); $t->xparse( $inFilenameOrHandle ); $t->purge; return; } __END__ -- HTTP Sample, with nested samples MyHeader: MyValue MyHeader: MyValue GET http://www.apache.org/