Selvakumar has asked for the wisdom of the Perl Monks concerning the following question:

i want to find an element and i need to get the element with all attributes and store in to an variable. how can i do that. i am pasting below the xml and my code here. i need to store to $tagname.
2. How can i add new parent name to my "textbox" element? i need to add <qxp> as parent name. i should not rename the parent existing.

use strict; use warnings; use XML::Parser; use XML::Twig; my $xmlfile = 'input1.xml'; # the file to parse # initialize parser object and parse the string my $parser = XML::Parser->new( ErrorContext => 2 ); eval { $parser->parsefile( $xmlfile ); }; # report any error that stopped parsing, or announce success if( $@ ) { $@ =~ s/at \/.*?$//s; # remove module line number print STDERR "\nERROR in '$xmlfile':\n$@\n"; exit; } my $twig=XML::Twig->new(twig_handlers=>{ indd_document=>\&root_process, div => \&div_handler, content=> \&content_handler, }); $twig->parsefile( $xmlfile); open(FH,">output.xml") or die "cannot open output.xml: $!"; my $temp = $twig->toString; print FH $temp; close (FH); $twig->purge; #root tag "indd_document" process here sub root_process { my( $twig, $root)= @_; $root->set_tag( 'document'); $root->set_atts({OutputCreationDate=>'20090510', OutputCreationT +ime=>'00:00:00', 'xml:space'=>"preserve"}); $root->purge; } #paragraph element process goes here sub div_handler { my ($twig, $div)= @_; $div->set_tag('paragraph'); $div->del_att('cstyID','pstyID'); my $attval=$div->att('class'); $attval=~s/P_//; $div->set_att(style => $attval); $attval=~s/_//g; $attval="P".$attval; $div->set_att(class =>$attval); } #content tag handler sub content_handler { my ($twig, $content)= @_; my $tagname=$content->xpath(q{//box[@textflowid="rc_u50c6"]}); print $tagname; #For textbox element if($content->{'att'}->{'type'} eq "text") { $content->set_tag('textbox'); my $parent='qxpobject'; } }

Replies are listed 'Best First'.
Re: xml::twig find a element with all attributes
by mirod (Canon) on Oct 06, 2009 at 12:34 UTC

    I don't quite understand the question. Precisely, I don't know where your code doesn't produce the proper output (or what that output should be for what matters).

    A cursory look at the code shows that you know how to get the attributes of an element, so what exactly are you looking for? Is it the atts method, that returns a reference to a hash of all the element attributes?

Re: xml::twig find a element with all attributes
by Anonymous Monk on Oct 06, 2009 at 11:42 UTC
    Why no sample input/output?