/usr/bin/validxml is in libxml-validate-perl 1.025-2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | #!/usr/bin/perl -w
eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
if 0; # not running under some shell
use strict;
use XML::Validate qw();
use Getopt::Long qw();
require Log::Trace;
use vars qw($VERSION);
($VERSION) = ('$Revision: 1.10 $' =~ /([\d\.]+)/ );
my $assert_invalid = 0;
my $help = 0;
my $tracing = 0;
my $deep_tracing = 0;
my $backend = 'BestAvailable';
Getopt::Long::GetOptions(
't' => \$tracing,
'T' => \$deep_tracing,
'assert-invalid' => \$assert_invalid,
'backend:s' => \$backend,
'help' => \$help
);
import Log::Trace 'print' if $tracing;
import Log::Trace 'print' => { Deep => 1 } if $deep_tracing;
my @files;
while (my $mask = shift) {
push @files, glob($mask);
}
if ($help || @files < 1) {
require Pod::Usage;
Pod::Usage::pod2usage(-verbose => 2);
}
my $validator = new XML::Validate(Type => $backend);
my %errors;
for my $file (@files) {
open(FH,$file) || die "Unable to open file handle FH for file '$file': $!\n";
local $/ = undef;
my $xml = <FH>;
close(FH) || warn "Unable to close file handle FH for file '$file': $!\n";
if (my $tree = $validator->validate($xml)) {
$errors{$file} = '';
} else {
if ($validator->last_error()->{message}) {
$errors{$file} = sprintf("%s at %d:%d",@{$validator->last_error()}{'message','line','column'});
} else{
$errors{$file} = 'Unknown error';
}
if (length($errors{$file}) > 0) {
$errors{$file} =~ s/(\n|\r|\cM)/ /gi;
}
}
}
print "1..".@files."\n";
for my $file (@files) {
if ($errors{$file}) {
print(($assert_invalid ? '' : 'not ').
"ok - $file - $errors{$file}\n");
} else {
print(($assert_invalid ? 'not ' : '').
"ok - $file\n");
}
}
=pod
=head1 NAME
validxml - Command-line driver for XML::Validate.
=head1 SYNOPSIS
validxml *.xml
validxml --assert-invalid *.xml
=head1 DESCRIPTION
Command-line driver for XML::Validate using the 'BestAvailable' processing
type.
=head2 Commandline Options
=over 4
=item --assert-invalid
Swap the ok/not ok so invalid things are OK - still output the validation
error) - this is useful for schema "unit tests".
=item --backend [validator type]
Specify an C<XML::Validate> backend to use (e.g LibXML, Xerces). Defaults to
I<BestAvailable>.
=back
=head2 Output
Output is Test::Harness compatible.
1..scalar @files
ok - filename/not ok - filename - validation error
=head1 VERSION
$Revision: 1.10 $
$Id: validxml.pl,v 1.10 2006/04/07 09:43:10 johnl Exp $
=head1 AUTHOR
Nicola Worthington
$Author: johnl $
=head1 COPYRIGHT
(c) BBC 2005. This program is free software; you can redistribute it and/or modify it under the GNU GPL.
See the file COPYING in this distribution, or http://www.gnu.org/licenses/gpl.txt
=cut
__END__
|