I’m validating xml documents with the lxml schematron module. It works well but I can’t display the validation report, which is set as a property. I can’t find how to process it as an XML tree.
Here the snippet of the code I use:
xdoc = etree.parse("mydoc.xml")
# schematron code removed for clarity
f = StringIO.StringIO('''<schema>...</schema>''')
sdoc = etree.parse(f)
schematron = isoschematron.Schematron(sdoc, store_schematron=True, store_xslt=True, store_report=True)
if schematron.validate(xdoc):
print "ok"
else:
tprint "ko"
report = isoschematron.Schematron.validation_report
>>> type(report)
<type 'property'>
>>> dir(report)
['__class__', '__delattr__', '__delete__', '__doc__', '__format__', '__get__',
'__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__set__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'deleter', 'fdel', 'fget', 'fset', 'getter', 'setter']
>>> report.__doc__
'ISO-schematron validation result report (None if result-storing has\n been turned off).\n
The lxml documentation is not clear on this point. Can somebody help me getting the xml report tree?
You need to set the Schematron class’ store_report
__init__(...)parameter to True (default: False).IMHO the documentation is pretty clear on this point, see e.g. http://lxml.de/api/lxml.isoschematron.Schematron-class.html
or