2012-06-09 2 views
2

Я проверяю документы xml с помощью модуля схема lxml. Он работает хорошо, но я не могу отобразить отчет проверки, который задан как свойство. Я не могу найти, как обрабатывать его как дерево XML.Проблема с выпуском schematron с python lxml

Здесь фрагмент кода я использую:

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 

LXML документация не ясно по этому вопросу. Может ли кто-нибудь помочь мне получить дерево отчетов xml?

ответ

3

Вам необходимо установить для параметра Schematron класс store_report __init__(...) значение True (по умолчанию: False).

IMHO документация довольно понятна в этом пункте, см., Например, http://lxml.de/api/lxml.isoschematron.Schematron-class.html или

>>> help(Schematron): 
class Schematron(lxml.etree._Validator) 
| An ISO Schematron validator. 
| 
| ... 
| With ``store_report`` set to True (default: False), the resulting validation 
| report document gets stored and can be accessed as the ``validation_report`` 
| property. 
+0

хорошо ... это было в моем образце. –

3

Люди, оказавшиеся здесь, возможно, также хотят, чтобы взглянуть на вопрос ниже; первый ответ дает довольно четкий пример того, как сделать отчет о работе Schematron (сообщение об этом, потому что я не смог найти рабочих рабочих примеров, и я нашел документацию lxml также несколько запутанной). Здесь идет:

Schematron validation with lxml in Python: how to retrieve validation errors?

+0

отлично. который решает проблему. Я заменил отчет init на report = schematron.validation_report, и все сделано. –