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 134 135 136 137 138 139 140 141 142 143 144 145 146
| use strict;
use warnings;
package TNA_Tools_XML;
use English;
use Carp;
use XML::Xerces;
use TNA_Include;
my %result_test = ();
sub verif_xsd
{
# On passe en paramètre le nom complet du fichier XML.
my $xml_file = $_[0];
my %result = ();
# valeurs par défaut retournées
init_result_test();
# Les étapes de ce programme sont :
# 1 - vérifier l'existence du fichier XML
# 2 - vérifier que le fichier XML est bien formé et conforme à son XSD
if (existe_fichier($xml_file) == 0)
{
# Le fichier XML existe et on évalue en même temps qu'il est bien formé
# et cohérent avec son fichier XSD
# Il faut appeler explicitement XMLPlatformUtils::Initialize()
# car le module Xerces.pm ne le fait pas.
XML::Xerces::XMLPlatformUtils::Initialize();
my $parser = XML::Xerces::XercesDOMParser->new();
my $ERROR_HANDLER = XML::Xerces::PerlErrorHandler->new();
$parser->setErrorHandler($ERROR_HANDLER);
# Par défaut, on ne vérifie pas la DTD. Il faut donc imposer ce contrôle
$parser->setValidationScheme($XML::Xerces::AbstractDOMParser::Val_Always);
$parser->setDoNamespaces (1);
$parser->setDoSchema (1);
eval
{
$parser->parse($xml_file);
};
if ($@)
{
# Le XML n'est pas cohérent avec son fichier XSD
$result_test{message} = $@;
$result_test{numero} = 1;
}
# Il faut appeler explicitement XMLPlatformUtils::Terminate()
# car le module Xerces.pm ne le fait pas.
XML::Xerces::XMLPlatformUtils::Terminate();
}
else
{
# Le fichier XML n'existe pas
$result_test{numero} = 1;
$result_test{message} = "Fichier XML manquant";
}
# On renvoie le numéro et le message d'erreur
%result = %result_test;
return %result;
}
sub init_result_test
{
# Initialise le tableau hashé de résultat avec des valeurs par défaut
$result_test{numero} = 0;
$result_test{message} = ' ';
}
sub existe_fichier
{
# Vérifie l'existence d'un fichier
my $fichier = $_[0];
if (-f $fichier)
{
return 0;
}
else
{
return 1;
}
}
sub verif_dtd
{
# On passe en paramètre le nom complet du fichier XML.
my $xml_file = $_[0];
my %result = ();
# valeurs par défaut retournées
init_result_test();
# Les étapes de ce programme sont :
# 1 - vérifier l'existence du fichier XML
# 2 - vérifier que le fichier XML est bien formé et conforme à sa DTD
if (existe_fichier($xml_file) == 0)
{
# Le fichier XML existe et on évalue en même temps qu'il est bien formé
# et cohérent avec sa DTD
# Il faut appeler explicitement XMLPlatformUtils::Initialize()
# car le module Xerces.pm ne le fait pas.
XML::Xerces::XMLPlatformUtils::Initialize();
my $parser = XML::Xerces::XercesDOMParser->new();
my $ERROR_HANDLER = XML::Xerces::PerlErrorHandler->new();
# Par défaut, on ne vérifie pas la DTD. Il faut donc imposer ce contrôle
$parser->setValidationScheme($XML::Xerces::AbstractDOMParser::Val_Always);
$parser->setErrorHandler($ERROR_HANDLER);
eval
{
$parser->parse($xml_file);
};
if ($@)
{
# Le XML n'est pas cohérent avec sa DTD
$result_test{message} = $@;
$result_test{numero} = 1;
}
# Il faut appeler explicitement XMLPlatformUtils::Terminate()
# car le module Xerces.pm ne le fait pas.
XML::Xerces::XMLPlatformUtils::Terminate();
}
else
{
# Le fichier XML n'existe pas
$result_test{numero} = 1;
$result_test{message} = "Fichier XML manquant";
}
# On renvoie le numéro et le message d'erreur
%result = %result_test;
return %result;
}
1; |