I am writing a perl program to remove certain servlet tags from a web.xml file. One attempt (see listing) seems to work well except that comments are not preserved.
The attempt below preserves comments but mangles the XML prolog. What can I do to overcome this?
------------------ Perl Code ---------------- #!/usr/bin/perl use strict; use XML::Twig; my $twig= new XML::Twig(TwigRoots => { servlet => 1 }, TwigHandlers => { servlet => \&servletTag}, + TwigPrintOutsideRoots => 1 ); $twig->set_pretty_print( "indented"); $twig->parsefile( "web.xml"); $twig->flush(); sub servletTag { my $LOCALE = "es_US"; my( $twig, $servlet)= @_; my $jspFileTag= $servlet->first_child("jsp-file");; if (defined($jspFileTag)) { my $path = $jspFileTag->text(); my $LOCALE_MOD = "/$LOCALE/"; if ( $path =~ /$LOCALE_MOD/ ) { $servlet->cut(); return; } } } ------------------ XML Input File ------------ <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3// +EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <!-- This is my comment --> <web-app> <servlet> <servlet-name>Authenticate_en_US</servlet-name> <jsp-file>/vxml/en_US/type_0/entry/Authenticate.jsp</jsp-file> <load-on-startup>2</load-on-startup> </servlet> <servlet> <servlet-name>Authenticate_es_US</servlet-name> <jsp-file>/vxml/es_US/type_0/entry/Authenticate.jsp</jsp-file> <load-on-startup>2</load-on-startup> </servlet> </web-app> ------------------ Program Output ------------ <?xml version="1.0" encoding="ISO-8859-1"?>><!-- This is my comment -- +><web-app> </web-app> <web-app> <servlet> <servlet-name>Authenticate_en_US</servlet-name> <jsp-file>/vxml/en_US/type_0/entry/Authenticate.jsp</jsp-file> <load-on-startup>2</load-on-startup> </servlet>
In reply to XML::Twig Mangles XML prolog by gjeffrey
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |