Validating XML node against a XSD schema
Sometimes you need to make sure a part of the xml document (more precisely a node and all node’s children) are valid according to a given schema. So how this can be done, as XML validators tend to work on document basis (there seems to be something called XML fragments, but haven’t yet found a way to validate the nodes using xml fragments) ?
The workflow is simple:
- load the xsd file we want to validate against. For this I’ll use the handy class which searches the classpath for the given resource.
- transform the node into xml document.
- validate the document against the schema.
public static String xmlToString(Node node)
{
try
{
Source source = new DOMSource(node);
StringWriter stringWriter = new StringWriter();
Result result = new StreamResult(stringWriter);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.transform(source, result);
return stringWriter.getBuffer().toString();
}
catch (TransformerConfigurationException e)
{
e.printStackTrace();
}
catch (TransformerException e)
{
e.printStackTrace();
}
return null;
}
then we’ll use this string as a stream to create the document from and validate against the schema as bellow:
StringReader r = new StringReader(xmlToString(node)); validator.validate(new StreamSource(r));
The entire code is attached here (as example only, in production you’ll probably have to close the open input streams returned by the ClassPathSearcher class)