Something like:
use strict;
use warnings;
use XML::Twig;
my $xmlStr = <<XML;
<doc>
<testcase1>
<step1 command ="Launchapp " param1 = "executablepath" param2 = "d
+irpath"/>
<step2 command = "Dothis"/>
<step3 command = "Changemode" param1 = "100"/>
<step4 command = "CaptureRectanlge" param1 = "3" param2 = "96" par
+am3 = "726" param4 = "580"/>
<step5 command = "CompareImage" image1 = "D:\\img1.jpg" image2 = "
+D:\\img2.jpg "/>
</testcase1>
<testcase2>
<step1 command ="Launchapp " param1 = "executablepath" param2 = "d
+irpath"/>
<step2 command = "Dothis"/>
<step3 command = "Changemode" param1 = "100"/>
<step4 command = "CaptureRectanlge" param1 = "3" param2 = "96" par
+am3 = "726" param4 = "580"/>
<step5 command = "CompareImage" image1 = "D:\\img1.jpg" image2 = "
+D:\\img2.jpg "/>
</testcase2>
</doc>
XML
my $twig = new XML::Twig(twig_handlers => {'*' => \&testcase});
$twig->parse($xmlStr);
sub testcase {
my ($twig, $testcase) = @_;
my $tag = $testcase->tag();
return 1 if $tag !~ /^testcase\d+$/;
print "$tag\n";
for my $step ($testcase->children()) {
my $tag = $step->tag();
my %attrs = %{$step->atts()};
print "Command: $attrs{'command'}(";
print join ', ', map {$attrs{$_}} grep {/^param/} sort keys %a
+ttrs;
print ")\n";
}
print "\n";
}
Prints:
testcase1
Command: Launchapp (executablepath, dirpath)
Command: Dothis()
Command: Changemode(100)
Command: CaptureRectanlge(3, 96, 726, 580)
Command: CompareImage()
testcase2
Command: Launchapp (executablepath, dirpath)
Command: Dothis()
Command: Changemode(100)
Command: CaptureRectanlge(3, 96, 726, 580)
Command: CompareImage()
This is somewhat messier than it ought be because the test case tags are all different. If the tags were 'testcase' and the case identifier were an attribute the twig_handlers expression could be just 'testcase' and the testing in the handler sub is no longer required.
True laziness is hard work
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.