#!/usr/local/bin/perl -w use strict; use XML::DOM; my $str = < ]> SPHN IBM Blue Horizon at SDSC 920 of 1152 processors busy. END my $parser = new XML::DOM::Parser (ParseParamEnt => 1, KeepCDATA => 1); my $node = $parser->parse ($str); my $nodes= $node->getElementsByTagName ( "usage" ); my $n = $nodes->getLength; for (my $i = 0; $i < $n; $i++) { process_usage( $node, $nodes->item ($i)); } print $node->toString; exit; # USAGE HANDLER sub process_usage { my ( $node, $usage )= @_; my $map = $usage->getAttributes; my $list = $map->getValues; for my $val ( @$list ) { my $arg = $val->getName; my $tag = $node->createElement( $arg ); my $argv = $val->getNodeValue; my $text = $node->createTextNode( $argv ); $tag->appendChild( $text ); $usage->appendChild( $tag ); } $usage->removeAttribute( 'type' ); $usage->removeAttribute( 'value' ); }