Các kịch bản perl sau đây sẽ làm những gì bạn muốn:
#!/usr/bin/perl
#
use strict;
use warnings;
use LWP::Simple;
sub downloadfile {
my ($url, $file) = @_;
getstore($url, $file);
}
sub getLinesMatching {
my ($file, $pattern) = @_;
open my $fh,'<',$file or die "Could not open $file: $!";
my @matching = grep /schemaLocation/,<$fh>;
my $size = @matching;
close $fh;
@matching;
}
sub processFile {
my ($url, $file) = @_;
downloadfile $url, $file;
my @lines = getLinesMatching $file,'schemaLocation';
if (@lines > 0) {
foreach my $line (@lines) {
$line =~ /schemaLocation=\"([^\"]*)/;
my ($url2) = $1;
print "$url2\n\n";
$url2 =~ /.*\/([^\/]*)/;
my ($file2) = $1;
print "$file2\n\n";
processFile ($url2, $file2);
}
}
}
my ($url) = @ARGV;
$url =~ /.*\/([^\/]*)/;
my ($base) = $1;
$base =~ s/\?/./;
print "Processing [$base] for [$url]\n\n";
processFile $url, $base;
Nói tóm lại, phải mất trôi qua trong tham số dưới dạng URL để lấy như các tập tin đầu tiên. Sau đó nó quét tệp đó cho các thuộc tính schemaLocation và tải xuống từng tệp trong một cách đệ quy cho đến khi tất cả các lược đồ được định vị hoặc không thể tìm thấy.
Để gọi các kịch bản:
perl thisscript.perl wsdlURL
Nó sẽ cố gắng một cách đệ quy làm việc từ file wsdl qua từng xsd nhập khẩu và tạo ra tất cả các file trong thư mục hiện hành.
Tôi đang tìm kiếm thêm API hoặc công cụ dòng lệnh miễn phí; Tôi không tìm kiếm nhiều đề xuất ứng dụng. – zzztimbo