use Win32::OLE;
use strict;
unless ($ARGV[1])
{
print "Usage: schemaVAlidate xmlfile xsdfile\n";
exit;
}
validateFile($ARGV[0], $ARGV[1]);
sub validateFile
{
my $xmlFile=shift;
my $schemaFile=shift;
print "validate $xmlFile against $schemaFile\n\n";
unless (-e $xmlFile and -e $schemaFile)
{
die "can not open $xmlFile or $schemaFile\n";
}
# Create a schema cache and add books.xsd to it.
#my $xs = new Win32::OLE("MSXML2.XMLSchemaCache.4.0");
my $xs = new Win32::OLE("MSXML2.XMLSchemaCache.6.0");
$xs->add("", $schemaFile);
#Create an XML DOMDocument object.
#my $xd = new Win32::OLE("MSXML2.DOMDocument.4.0");
my $xd = new Win32::OLE("MSXML2.DOMDocument.6.0");
# Assign the schema cache to the DOMDocument's
# schemas collection.
$xd->{"schemas"} = $xs;
# Load books.xml as the DOM document.
$xd->{"async"} = 0;
$xd->{"validateOnParse"}=1;
$xd->{"resolveExternals"} = 1;
$xd->load($xmlFile);
# Return validation results in message to the user.
my $parseError=$xd->{"parseError"};
if ($parseError->{"errorCode"} != 0)
{
print "Validation failed on " . $xmlFile .
"\n=====================" .
"\nReason: " . $parseError->{"reason"} .
"\nSource: " . $parseError->{"srcText"} .
"\nLine: " . $parseError->{"line"} . "\n";
}
else
{
print "validate success.\n";
}
}