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

Dear Monks

Now that I've managed to read and write XML formatted text,
I would like to take it one step furhter, but I'm not sure how.
First of all, I'm not sure if XML::Simple can do this for me.
I would like to change the values for all tags which match (for example) 'time', like

   $tag_name =~ /time/

Assuming that the value is a date/time, I can now change the date/time format for example

So is it possible with XML::Simple to do this (easily) ?

Thanks a lot
Luca
  • Comment on XML: how to change the values of specific tags

Replies are listed 'Best First'.
Re: XML: how to change the values of specific tags
by idsfa (Vicar) on Apr 19, 2006 at 17:35 UTC

    XML::Simple will read in and write out your XML file. If you want to change the data, you need to search through the data hash it provides and make the changes yourself. OTOH, this is a trivial XSL transformation for something like XML::XSLT:

    # # Here's the stylesheet. The annoying part is that the # actual change is three lines, the rest is grammar. You # can add multiple templates to make simultaneous changes. # my $xsl = <<EOS; <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" versi +on="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <transform> <xsl:apply-templates/> </transform> </xsl:template> <xsl:template match="//time"> $new_time </xsl:template> </xsl:stylesheet> EOS # # The perl is down here # use XML::XSLT; my $xslt = XML::XSLT->new ($xsl, warnings => 1); $xslt->transform ($xmlfile); print $xslt->toString; $xslt->dispose();

    This same tool could also answer your question in how to replace the <anon> tag (XML::Simple).


    The intelligent reader will judge for himself. Without examining the facts fully and fairly, there is no way of knowing whether vox populi is really vox dei, or merely vox asinorum. — Cyrus H. Gordon