0

以前にこの質問をしたことがありますが、適切な例が含まれていなかったため、満足のいく答えが得られませんでした。

xsl を使用してこれらのスクリプトからの xml 出力を出力する複数のスクリプトがあります。これらのスクリプトを呼び出し、出力を組み合わせて 1 つの出力を出力する 1 つのマスター スクリプトを作成したいと考えています。誰かがこれで私を助けてもらえますか?

#Example Script 1

use strict;
use warnings;
use Data::Dumper;
use XML::Simple;
use Getopt::Long;

my $output = '';
my $debug = 0;
my $path;
GetOptions('path=s' => \$path,'output=s' => \$output, 'debug=i' => \$d
+ebug);

if($output eq ''){
    die ("parameter --output=s is missing");
}     
open my $xmloutput, ">", $outputFile or die "can not open $outputFile 
+";
 print $xmloutput "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<?xml-s
+tylesheet type=\"text/xsl\" href=\"book.xsl\"?>\n<Books>\n";

my $parser = new XML::Simple;
my $data = $parser->XMLin("$path");
print $xmloutput " <bookDetails> \n";
print $xmloutput "  <bookName>$data</bookName> \n";
print $xmloutput " </bookDetails> \n";
print $xmloutput " </Books> \n";
close $xmloutput;

例 2

EXAMPLE 2
use strict;
use warnings;
use Data::Dumper;
use XML::Simple;
use Getopt::Long;

my $output = '';
my $debug = 0;
my $path;
GetOptions('path=s' => \$path,'output=s' => \$output, 'debug=i' => \$d
+ebug);

if($output eq ''){
    die ("parameter --output=s is missing");
}     
open my $xmloutput, ">", $outputFile or die "can not open $outputFile 
+";
 print $xmloutput "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<?xml-s
+tylesheet type=\"text/xsl\" href=\"Piano.xsl\"?>\n<Piano>\n";

my $parser = new XML::Simple;
my $data = $parser->XMLin("$path");
print $xmloutput " <PianoDetails> \n";
print $xmloutput "  <PianoName>$data</PianoName> \n";
print $xmloutput " </PianoDetails> \n";
print $xmloutput " </Piano> \n";
close $xmloutput;

これは私がしようとしているものです。

  my $output = '';


   my $example1 = `perl script1.pl --path=c:/cygwin/home/username/directory --debug=1`;
    my $example2 = `perl script2.pl --path=c:/cygwin/home/username/directory --debug=1`;

 open my $finaloutput, ">" $output or die "cant open the file";
  print $finaloutput "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<?xml-stylesheet     
          type=\"text/xsl\" href=\"final.xsl\"?>\n<OutputDestination>\n";

   my @attachscript  = ($example1, $example2);

   for my $attached (@attachscript) {
     print $finaloutput "<outputgoes_here_from_script> $attached   
                         </outputgoes_here_from_script>
    }

     PRINT $finaloutput "</OutputDestination>"
     close $finaloutput;

これを行うより良い方法はありますか?

4

1 に答える 1

0

script1 と script2 を Perl モジュールに変換して、ラッパー内で直接 (関数として) 呼び出すことができない場合 (または単一の新しいスクリプトに書き直すことさえできない場合)、ラッパーでこれを行うことを検討します。

open (STDOUT, ">$output") or die "Can't open STDOUT: $!";
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<?xml-stylesheet type=\"text/xsl\" href=\"final.xsl\"?>\n<OutputDestination>\n";
print "<outputgoes_here_from_script>";
`perl script1.pl --path=c:/cygwin/home/username/directory --debug=1`;
print "</outputgoes_here_from_script>";
print "<outputgoes_here_from_script>";
`perl script2.pl --path=c:/cygwin/home/username/directory --debug=1`;
print "</outputgoes_here_from_script>";
print "</OutputDestination>";
close(STDOUT);

バックティック システム コールの前に「印刷」が必要になる場合がありますが、最初はその方法で試してください。ただし、各スクリプトからの出力を保存する必要性をスキップするだけで、アプローチと大差ありません。

于 2012-06-20T17:32:03.073 に答える