2010-08-03 3 views
3

J'essaie de faire en sorte que mon script perl obtienne un fichier Xxml en ligne et le valide en fonction d'un fichier XSD.Validation de XML en Perl avec libxml et un fichier XSD

Le code pour ce faire est la suivante:

my $url = shift @ARGV; 
my $response = $ua->get($url) || die "Can't fetch file"; 
my $file = $response->content; 

my $schema_file = "schema.xsd"; 
my $schema = XML::LibXML::Schema->new(location => $schema_file); 
my $parser = XML::LibXML->new; 
my $doc = $parser->parse_string($file); 
eval { $schema->validate($doc) }; 
die [email protected] if [email protected]; 

L'exécution de ce résultat une erreur cryptique: « Element échec de la vérification du contenu cropdata » (cropdata est la première de mes balises nonroot).

Dans mon fichier XSD, l'entrée ressemble à:

<xs:element name="cropdata"> 
<xs:complexType> 
<xs:sequence> 

Ensuite, un groupe de "<xs:element..../>" puis:

</xs:sequence> 
</xs:complexType> 
</xs:element> 

Entrant dans le débogueur perl montre que après avoir laissé ligne "my $doc = $parser->parse_string($file);" run, $ doc s'imprime en XML :: LibXML :: Document = SCALAR (0x6b99f0). Est-ce que quelqu'un peut m'aider à faire la lumière sur ce que je fais de mal? (Attention: c'est peut-être une erreur stupide, je ne le mettrais pas de côté).

+1

Essayez 'use Data :: Dumper; Dumper ($ doc); 'juste après l'appel parse_string - l'objet $ doc semble-t-il correct? – Ether

+0

@Ether, $ doc sera presque certainement une référence scalaire à un nombre qui est l'adresse mémoire d'une structure de données C. –

+2

À quoi ressemble l'entrée XML? Est-ce valide par le schéma? –

Répondre

0

Il s'avère que l'exemple de fichier xml que j'avais été fourni n'était pas valide, et voilà, en le vérifiant et en le corrigeant dans xmllint, tout fonctionne.

Questions connexes