import logging logger = logging.getLogger("RoundupExport") from config import RELAXNG_SCHEMA_FILE import libxml2 class ErrorHandler: def __init__(self): self.errors = [] def handler(self, msg, data): self.errors.append(msg) class ValidateXML(object): def __init__(self, xml): self.xml = xml def validate(self): schemaf = open(RELAXNG_SCHEMA_FILE, "r") schema = schemaf.read() schemaf.close() rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema)) rngs = rngp.relaxNGParse() ctxt = rngs.relaxNGNewValidCtxt() e = ErrorHandler() ctxt.setValidityErrorHandler(e.handler, e.handler) doc = libxml2.parseDoc(self.xml) ret = doc.relaxNGValidateDoc(ctxt) if ret != 0 or e.errors: logger.debug("Error doing RelaxNG validation") else: logger.debug("RelaxNG validation successful") return e