in reply to Add attribute to xml with XML::LibXML
Create an iterator, pass over each element looking for 'branche' nodes, and update them when found:
produces:use strict; use warnings; use XML::LibXML; use XML::LibXML::Iterator; my $parser = XML::LibXML->new(); my $dom = $parser->load_xml(location => 'input.xml'); my %newtypes = ( courbe => 'conifere', droite => 'resineux' ); my $iter = XML::LibXML::Iterator->new( $dom->documentElement ); while ( $iter->nextNode() ) { my $node = $iter->current(); next unless $node->nodeName eq 'branche'; $node->setAttribute( 'type', $newtypes{$node->getAttribute('name')} ); } print $dom->toString; exit 0;
<?xml version="1.0"?> <arbre> <branche name="courbe" type="conifere"> <description> <![CDATA[une belle branche]]> </description> <feuilles> <fleur color="blue" order="1"/> <fleur color="white" order="2"/> <fleur color="yellow" order="3"/> </feuilles> </branche> <branche name="droite" type="resineux"> <description> <![CDATA[une branche commune]]> </description> <feuilles> <fleur color="purple" order="1"/> <fleur color="green" order="2"/> </feuilles> </branche> </arbre>
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Add attribute to xml with XML::LibXML
by tobyink (Canon) on Jul 30, 2013 at 15:22 UTC |