How about something like this...
#!/usr/local/bin/perl -w
use strict;
use warnings;
use XML::LibXML;
use XML::LibXSLT;
my $xml = q{<doc.body>
<head n="1">Introduction</head>
<para>para 1</para>
<para>para 2</para>
<head n="2">Individual</head>
<para>para 1</para>
<para>para 2:
<list listtype="bull">
<item>item 1</item>
<item>2</item>
</list>
</para>
</doc.body>
};
my $xslt_stylesheet = q{<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:template match="/doc.body">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="head">TX <h3><xsl:apply-templates/></h3>
</xsl:template>
<xsl:template match="para">TX <xsl:apply-templates/>
</xsl:template>
<xsl:template match="list">TX <ol><xsl:apply-templates/></ol>
</xsl:template>
<xsl:template match="list/item"><li><xsl:apply-templates/></li>
</xsl:template>
</xsl:stylesheet>
};
my $parser = XML::LibXML->new();
my $xslt = XML::LibXSLT->new();
my $style_doc = $parser->parse_string( $xslt_stylesheet );
my $source = $parser->parse_string( $xml );
my $stylesheet = $xslt->parse_stylesheet( $style_doc );
my $results = $stylesheet->transform( $source );
my $output = $stylesheet->output_string( $results );
print $output;
Output:
:!./t1.pl
TX <h3>Introduction</h3>
TX para 1
TX para 2
TX <h3>Individual</h3>
TX para 1
TX para 2:
TX <ol>
<li>item 1</li>
<li>2</li>
</ol>
Best Regards,
Wonko