Validace XML v Perlu
Honza Pazdziora
adelton na fi.muni.cz
Pátek Říjen 19 11:07:45 CEST 2007
On Mon, Oct 15, 2007 at 11:37:43PM +0200, Jan Kasprzak wrote:
>
> ne ze by mi to bylo prijemne, ale musim zase po nejake dobe zpracovavat
> v Perlu data v XML. Prislo mi ze pro zpracovani dat je XML::Simple::XMLin()
> presne to co potrebuju, akorat by bylo dobre ta data predem nejak
> zvalidovat, ze maji zhruba takovou strukturu jako ocekavam.
>
> Predstavoval bych si, ze nejak co nejjednoduseji zapisu
> jak se jmenuje korenovy element, jake muze/musi mit atributy a tagy uvnitr
> (vyhodou by bylo popsat i jak maji hodnoty atributu a text uvnitr tagu
> vypadat, nejlepe jednoduchym perlovym regularnim vyrazem, ale neni to nutne)
> a totez pak o kazdem dalsim pouzitem tagu. Co je dnes moderni? DSSSL?
> XML Schema? Neco jineho?
Kdyz pouzijes XML Schema, tak neurazis. ;-)
#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple;
use XML::Validator::Schema;
use Data::Dumper;
my $simple = new XML::Simple;
my $validator = XML::Validator::Schema->new(Handler => $simple,
file => 'foo.xsd');
my $parser = XML::SAX::ParserFactory->parser(Handler => $validator);
my $ref = eval { $parser->parse_uri('foo.xml') };
die "File failed validation: $@" if $@;
print Dumper $ref;
__END__
File failed validation: Found unexpected <qualificationx> inside <character>. This is not a valid child element. at /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/XML/LibXML/SAX.pm line 64
at ./simple-validator.pl line 15
> Zvolenou validacni technologii bych ale potreboval pouzit
> v Perlu tak, abych jednoduse rekl "tady jsou data a tady je popis struktury"
> a dostal stav validni/nevalidni s tim, ze u nevalidniho bych dostal prvni
> chybu - popis a cislo radku (pripadne i vsechny chyby, ale neni to nutne).
> Pokud si dobre vzpominam, pred par lety jsem mel snahu toto delat
> nad XML Schema, a tato validace (pokud jsem chtel i cislo radku chyby)
> vyzadovala fakt hodne programovani a prislusne perlove moduly byly
> fakt hodne tezkopadne.
Nojo, kdyz ses fajnsmekr a chces i cisla radku, tak budes muset pouzit
#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple;
use XML::Validator::Schema;
use XML::Filter::ExceptionLocator;
use XML::SAX::ExpatXS;
use Data::Dumper;
my $simple = new XML::Simple;
my $validator = new XML::Validator::Schema(Handler => $simple,
file => 'foo.xsd');
my $parser = new XML::SAX::ExpatXS(Handler => $validator);
my $ref = eval { $parser->parse_uri('foo.xml') };
die "File failed validation: $@" if $@;
print Dumper $ref;
__END__
File failed validation: Found unexpected <qualificationx> inside <character>. This is not a valid child element. [Ln: 10, Col: 18]
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
.project: Perl, C, Red Hat Network, IPv6, VoIP
Only self-confident people can be simple.
Další informace o konferenci Perl