2012-06-09 21 views
2

我正在使用lxml schematron模块验证xml文档。它运行良好,但我无法显示验证报告,该报告被设置为属性。我找不到如何将其作为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)。

恕我直言,在这一点上文件很清楚, 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报告工作(发布这个是因为我找不到任何工作示例,并且我发现文档也有些混淆)。这里有:

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

+0

太棒了。解决了这个问题。我用report = schematron.validation_report替换了报告init,并完成了。 –