in reply to Re^2: XML::Twig parsing Problem
in thread XML::Twig parsing Problem

I don't quite understand the question, but the arguments to the handler are the twig itself and the element object, not its tag name. So if you want to change the name of the element, you need $tag->set_tag( ...).

Also, the single quotes in '$tag_text' prevent interpolation (you will get the literal text $tag_text), get rid of them and you will get the value of $tag_text.

Replies are listed 'Best First'.
Re^4: XML::Twig parsing Problem
by saurabh.x.pandey (Initiate) on Dec 02, 2008 at 12:58 UTC
    HI Mirod actually $tag_name=href $tag_att=attr $att_value=cde $tag_text="the string which i want to write in place of old one" Here I want to rewrite in the file --the text of the tag which is href + and having attribute as "attr" value is "cde" and I want to relace t +his tag text with new "tag_text". there are two href tags in the file but i want to rewrite the text of +only href tag which has attr="cde" in the file. if i m using the original names in the program then it works but when +i m taking them as arguments then it's creating problem.
      I think the problem is from the quote you mark to each variable in sub. I have modified a little bit to your code and test print, it works, please try:
      use XML::Twig; use Data::Dumper; my $xml=$ARGV[0]; my $tag_name=$ARGV[1]; my $att_name=$ARGV[2]; my $att_value=$ARGV[3]; my $tag_text=$ARGV[4]; my $twig = XML::Twig->new(twig_roots => {$tag_name => \&select_change +},); $twig->parsefile($xml); $twig->print; $twig->flush; sub select_change { my($twig,$tag_name)=@_; if ($tag_name->att($att_name) =~ $att_value) { $tag_name->set_text($tag_text); } }