in reply to parse xml; get name of xsl file

#!/usr/bin/perl -- use strict; use warnings; my $xml = <<'__XML__'; <?xml version="1.0" encoding="UTF-8"?> <?xml-styleshet type="text/xsl" href="stylesheet1.xsl"?> <?xml-styleshet type="text/xsl" href="stylesheet2.xsl"?> <?xml-styleshet type="text/xsl" href="stylesheet3.xsl"?> <config /> __XML__ use XML::Twig; my @style; { XML::Twig->new( twig_handlers => { '?xml-styleshet' => sub { my ( $t, $pi, $data ) = @_; push @style, $data; return; }, }, )->parse($xml); } print join "\n", @style; __END__ type="text/xsl" href="stylesheet1.xsl" type="text/xsl" href="stylesheet2.xsl" type="text/xsl" href="stylesheet3.xsl"

Replies are listed 'Best First'.
Re^2: parse xml; get name of xsl file
by Anonymous Monk on Apr 21, 2009 at 13:53 UTC
    #!/usr/bin/perl -- use strict; use warnings; use XML::Twig; sub get_style { my @style; XML::Twig->new( twig_handlers => { '?xml-styleshet' => sub { my ( $t, $pi, $data ) = @_; XML::Twig->new( twig_handlers => { stylesheet => sub { push @style, $_->atts; }, }, )->parse("<stylesheet $data />"); return; }, }, )->parse(@_); return @style; } my $xml = <<'__XML__'; <?xml version="1.0" encoding="UTF-8"?> <?xml-styleshet type="text/xsl" href="stylesheet1.xsl"?> <?xml-styleshet type="text/xsl" href="stylesheet2.xsl"?> <?xml-styleshet type="text/xsl" href="stylesheet3.xsl"?> <config /> __XML__ use Data::Dumper; print Data::Dumper->new( [ get_style($xml) ] )->Indent(1)->Dump; __END__ $VAR1 = { 'href' => 'stylesheet1.xsl', 'type' => 'text/xsl' }; $VAR2 = { 'href' => 'stylesheet2.xsl', 'type' => 'text/xsl' }; $VAR3 = { 'href' => 'stylesheet3.xsl', 'type' => 'text/xsl' };