2

我正在使用 lxml schematron 模块验证 xml 文档。它运行良好,但我无法显示设置为属性的验证报告。我找不到如何将它作为 XML 树来处理。

这是我使用的代码片段:

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 报告树吗?

4

2 回答 2

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.
于 2012-10-10T07:17:17.473 回答
3

来到这里的人可能还想看看下面的问题;第一个答案提供了一个非常清楚的示例,说明如何使 Schematron 报告工作(发布这个是因为我找不到任何工作示例,而且我发现lxml文档也有些混乱)。开始:

在 Python 中使用 lxml 进行 Schematron 验证:如何检索验证错误?

于 2014-11-26T15:15:39.627 回答