第一个错误 -在 CPAN 上搜索,而不是 Google :)
这引发了一堆结果,但确实突出了 CPAN 的问题,即有不止一个解决方案,而且并不总是很清楚哪些解决方案有效、已被放弃、已损坏、速度慢或其他。
令人不安的是,最好的答案(或者至少是最好的答案之一)出现在结果的第四页:(正如其他人所建议的那样,XML::LibXSLT很健壮并且可以胜任:
use XML::LibXSLT;
use XML::LibXML;
my $parser = XML::LibXML->new();
my $xslt = XML::LibXSLT->new();
my $source = $parser->parse_file('foo.xml');
my $style_doc = $parser->parse_file('bar.xsl');
my $stylesheet = $xslt->parse_stylesheet($style_doc);
my $results = $stylesheet->transform($source);
print $stylesheet->output_string($results);
如果要将结果输出到文件,请添加此
#create output file
open(my $output_xml_file_name, '>', 'test.xml');
print $output_xml_file_name "$results";
但是,如果您不想做任何花哨的事情,可以使用 XML::LibXSLT::Easy ,它本质上只是将上述内容包装在一个方法调用中(并使用Moose在幕后做了很多聪明的事情。检查源代码教育!)。
use XML::LibXSLT::Easy;
my $p = XML::LibXSLT::Easy->new;
my $output = $p->process( xml => "foo.xml", xsl => "foo.xsl" );