Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

xml file validation

by valavanp (Curate)
on Feb 22, 2007 at 08:24 UTC ( #601507=perlquestion: print w/replies, xml ) Need Help??
valavanp has asked for the wisdom of the Perl Monks concerning the following question:

Monks, I have an xml file like this.
<node> <data> <field type="custom_content"> <name>Header: Step 1</name> <content><![CDATA[ <p>TESTING</p> ]]></content> </field> <field> <label>A</label> <input_type>text</input_type> <size>40</size> </field> <field type="custom_content"> <name>sample</name> <content><![CDATA[ <p>test</p> ]]></content> </field> </node>
I have an validation xml file like this:
<node> <?xml version="1.0" encoding="UTF-8"?> <grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:a="http://r +elaxng.org/annotation" datatypeLibrary="http://www.w3.org/2001/XMLSch +ema-datatypes"> <start> <element name="data"> <oneOrMore> <choice> <ref name="field"/> <ref name="custom_content_field"/> </choice> </oneOrMore> </element> </start> </grammar> </node>
i have thousands of lines in my xml file. How can i check my xml file is tagged properly with the validation file. how to approach this problem.

20070222 Janitored by Corion: Added formatting, code tags, as per Writeup Formatting Tips

Replies are listed 'Best First'.
Re: xml file validation
by Anonymous Monk on Feb 22, 2007 at 08:37 UTC
Re: xml file validation
by jesuashok (Curate) on Feb 22, 2007 at 09:09 UTC
Re: xml file validation
by maspalio (Scribe) on Feb 22, 2007 at 12:54 UTC
    Hi,

    I'm using XML::Xerces module. FYI, here is a sub that does the trick for my current project:

    use constant SPIRIT_VERSION => '1.2'; use constant SPIRIT_URL => 'http://www.spiritconsortium.org/XMLSch +ema/SPIRIT/' . SPIRIT_VERSION; =head2 validate_file validate_file ( $file, $ressucitate ) Validates SPIRIT DOM against its XML-Schema. Uses document URI unless +$ENV{SOCK_SCHEMA_LOCATION} is defined. Backbone is Apache Xerces library, only used in SOCK for validation pu +rposes. Expires unless $ressucitate is set. Returns validation errors. =cut sub validate_file { my ( $file, $ressucitate ) = @_; assert_nonblank $_[0]; if ( $ENV{SOCK_SCHEMA_LOCATION} ) { expire "Could not find any '$ENV{SOCK_SCHEMA_LOCATION}' directory! +" unless -d $ENV{SOCK_SCHEMA_LOCATION}; } say "Validating '$file' file..."; XML::Xerces::XMLPlatformUtils::Initialize (); my $parser = XML::Xerces::SAXParser->new; my $options = { setDoNamespaces => 1, setDoSchema => 1, setErrorHandler => XML::Xerces::PerlErrorHandler-> +new, setExitOnFirstFatalError => 0, setExternalSchemaLocation => SPIRIT_URL . ' ' . ( $ENV{SOCK_ +SCHEMA_LOCATION} || SPIRIT_URL ) . '/index.xsd', setValidationConstraintFatal => 0, setValidationSchemaFullChecking => 1, setValidationScheme => $XML::Xerces::AbstractDOMParser +::Val_Always, }; $parser->$_ ( $options->{$_} ) for keys %$options; eval { $parser->parse ( $file ) }; my $error = $@; $error = $error->getMessage if ref $error; XML::Xerces::XMLPlatformUtils::Terminate (); if ( $error ) { $error =~ s/ERROR:/Validation error:/; $error =~ s/\s+ at .+ line \d+\n//; $error =~ s/\n/\n--- /g; expire $error unless $ressucitate; counsel $error; } say "Done."; $error; }

    HTH.

    Cheers,

    X.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://601507]
Approved by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (3)
As of 2016-09-28 01:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Extraterrestrials haven't visited the Earth yet because:







    Results (516 votes). Check out past polls.