XML validation: Difference between revisions
Spintronic (talk | contribs) |
(→Java: Added implementation) |
||
Line 35: | Line 35: | ||
} |
} |
||
</lang> |
</lang> |
||
=={{header|Java}}== |
|||
<lang java>import static javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI; |
|||
import java.net.MalformedURLException; |
|||
import java.net.URL; |
|||
import javax.xml.transform.stream.StreamSource; |
|||
import javax.xml.validation.SchemaFactory; |
|||
import javax.xml.validation.Validator; |
|||
import javax.xml.ws.Holder; |
|||
import org.xml.sax.ErrorHandler; |
|||
import org.xml.sax.SAXException; |
|||
import org.xml.sax.SAXParseException; |
|||
public class XmlValidation { |
|||
public static void main(String... args) throws MalformedURLException, |
|||
SAXException { |
|||
URL schemaLocation = new URL("http://venus.eas.asu.edu/WSRepository/xml/Courses.xsd"); |
|||
URL documentLocation = new URL("http://venus.eas.asu.edu/WSRepository/xml/Courses.xml"); |
|||
if (validate(schemaLocation, documentLocation)) { |
|||
System.out.println("document is valid"); |
|||
} else { |
|||
System.out.println("document is invalid"); |
|||
} |
|||
} |
|||
public static boolean validate(URL schemaLocation, URL documentLocation) { |
|||
SchemaFactory factory = SchemaFactory.newInstance(W3C_XML_SCHEMA_NS_URI); |
|||
final Holder<Boolean> valid = new Holder<>(true); |
|||
try { |
|||
Validator validator = factory.newSchema(schemaLocation).newValidator(); |
|||
// Get some better diagnostics out |
|||
validator.setErrorHandler(new ErrorHandler(){ |
|||
@Override |
|||
public void warning(SAXParseException exception) |
|||
throws SAXException { |
|||
System.out.println("warning: " + exception.getMessage()); |
|||
} |
|||
@Override |
|||
public void error(SAXParseException exception) |
|||
throws SAXException { |
|||
System.out.println("error: " + exception.getMessage()); |
|||
valid.value = false; |
|||
} |
|||
@Override |
|||
public void fatalError(SAXParseException exception) |
|||
throws SAXException { |
|||
System.out.println("fatal error: " + exception.getMessage()); |
|||
throw exception; |
|||
}}); |
|||
validator.validate(new StreamSource(documentLocation.toString())); |
|||
return valid.value; |
|||
} catch (SAXException e) { |
|||
// Already reported above |
|||
return false; |
|||
} catch (Exception e) { |
|||
// If this is the only thing that throws, it's a gross error |
|||
System.err.println(e); |
|||
return false; |
|||
} |
|||
} |
|||
}</lang> |
Revision as of 11:04, 16 December 2014
Given an XML document and an XSD schema definition validate that the document follows the schema described.
C#
<lang csharp> using System; using System.Xml; using System.Xml.Schema; using System.IO;
public class Test { public static void Main() { // your code goes here XmlSchemaSet sc = new XmlSchemaSet(); sc.Add(null, "http://venus.eas.asu.edu/WSRepository/xml/Courses.xsd"); XmlReaderSettings settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.Schemas = sc; settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack); // Create the XmlReader object. XmlReader reader = XmlReader.Create("http://venus.eas.asu.edu/WSRepository/xml/Courses.xml", settings); // Parse the file. while (reader.Read()); // will call event handler if invalid Console.WriteLine("The XML file is valid for the given xsd file"); }
// Display any validation errors. private static void ValidationCallBack(object sender, ValidationEventArgs e) { Console.WriteLine("Validation Error: {0}", e.Message); } } </lang>
Java
<lang java>import static javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI;
import java.net.MalformedURLException; import java.net.URL;
import javax.xml.transform.stream.StreamSource; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import javax.xml.ws.Holder;
import org.xml.sax.ErrorHandler; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException;
public class XmlValidation { public static void main(String... args) throws MalformedURLException, SAXException { URL schemaLocation = new URL("http://venus.eas.asu.edu/WSRepository/xml/Courses.xsd"); URL documentLocation = new URL("http://venus.eas.asu.edu/WSRepository/xml/Courses.xml"); if (validate(schemaLocation, documentLocation)) { System.out.println("document is valid"); } else { System.out.println("document is invalid"); } }
public static boolean validate(URL schemaLocation, URL documentLocation) { SchemaFactory factory = SchemaFactory.newInstance(W3C_XML_SCHEMA_NS_URI); final Holder<Boolean> valid = new Holder<>(true); try { Validator validator = factory.newSchema(schemaLocation).newValidator(); // Get some better diagnostics out validator.setErrorHandler(new ErrorHandler(){ @Override public void warning(SAXParseException exception) throws SAXException { System.out.println("warning: " + exception.getMessage()); }
@Override public void error(SAXParseException exception) throws SAXException { System.out.println("error: " + exception.getMessage()); valid.value = false; }
@Override public void fatalError(SAXParseException exception) throws SAXException { System.out.println("fatal error: " + exception.getMessage()); throw exception; }}); validator.validate(new StreamSource(documentLocation.toString())); return valid.value; } catch (SAXException e) { // Already reported above return false; } catch (Exception e) { // If this is the only thing that throws, it's a gross error System.err.println(e); return false; } } }</lang>