Purists would say, this is a job for
XSLT. But for me that language is terribly mindboggling. So if I face XML-transformations I normally settle on this approach:
- read the xml using on of the many xml-parsers into a datastructure
- do the transformation using grep, map and sort.
- write the xml using a templating engine.
This has the charme that it nicely separates presentation from logic.
Example:
use strict;
use warnings;
use Template;
use XML::Simple;
my $data = XMLin( $ARGV[0], ForceArray => 'class' );
$data->{class} =
[
sort
{
$a->{strength}->[0] <=> $b->{strength}->[0]
}
@{$data->{class}}
];
#use Data::Dumper;
#print Dumper ( $data );
my $tt = Template->new();
$tt->process( \*DATA, {data => $data}, $ARGV[1] )
|| die $tt->error(), "\n";
__DATA__
<?xml version="1.0" encoding="UTF-8"?>
<system>
<header></header>
[% FOR class = data.class %]
<class>
<name>[% class.name.0 %]</name>
<strength>[% class.strength.0 %]</strength>
</class>
[% END %]
<footer></footer>
</system>
You can call this as with two arguments. The first is the file to be read, the second is the file to be written. If you omit the second argument, the output is written to STDOUT.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.