Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python库验证XML文件时出现多个错误?_Python_Xml_Validation_Error Handling_Lxml - Fatal编程技术网

如何使用Python库验证XML文件时出现多个错误?

如何使用Python库验证XML文件时出现多个错误?,python,xml,validation,error-handling,lxml,Python,Xml,Validation,Error Handling,Lxml,我有一些XML文件要验证,我必须用Python来验证。我试着用XSD和lxml验证它。但我只得到一个首先发生的错误,但我需要XML文件中的所有错误和不匹配。有什么方法可以让我用lxml获取所有错误的列表吗?或者还有其他Python解决方案吗?您可以 要了解如何执行try/except设计模式,您可以在except部分存储不匹配项(例如,一个列表或对列表),然后从第一个错误后的点再次递归地try/except。如果描述不够详细,请告诉我 干杯 解决这个问题的方法是: 可能有更好的方法来解决这个问题

我有一些XML文件要验证,我必须用Python来验证。我试着用XSD和lxml验证它。但我只得到一个首先发生的错误,但我需要XML文件中的所有错误和不匹配。有什么方法可以让我用lxml获取所有错误的列表吗?或者还有其他Python解决方案吗?

您可以 要了解如何执行
try/except
设计模式,您可以在
except
部分存储不匹配项(例如,一个列表或对列表),然后从第一个错误后的点再次递归地
try/except
。如果描述不够详细,请告诉我


干杯

解决这个问题的方法是:


可能有更好的方法来解决这个问题:)

由于几个错误,提供的解决方案不再有效。 在xmlschema上应用assertValid之前,必须按如下方式指定它:

try:
   xmlschema_doc = lxml.etree.parse(filename)
   xmlschema = lxml.etree.XMLSchema(xmlschema_doc)
   xmlschema.assertValid(elem_tree)
except lxml.etree.ParseError as e:
   raise lxml.etree.ParserError(str(e))
except lxml.etree.DocumentInvalid as e:
   if ignore_errors:
    raise lxml.etree.ValidationError("The Config tree is invalid with error 
       message:\n\n" + str(e)) 

使用
lxml
,您可以迭代
error\u log
并打印每个错误的行号和错误消息:

def validate_with_lxml(xsd_树、xml_树):
schema=lxml.etree.XMLSchema(xsd_树)
尝试:
schema.assertValid(xml_树)
除了lxml.etree.document无效:
打印(“验证错误:”)
对于schema.error\u日志中的错误:
打印(“行{}:{}”。格式(error.Line,error.message))
使用库,您可以使用
iter\u错误
方法:

下面是我的代码(Python 3):


对不起,我不明白。这两位代码如何组合在一起?什么是elem_树?有人能提供一个完整的工作代码示例吗?谢谢-罗文
try:
   xmlschema_doc = lxml.etree.parse(filename)
   xmlschema = lxml.etree.XMLSchema(xmlschema_doc)
   xmlschema.assertValid(elem_tree)
except lxml.etree.ParseError as e:
   raise lxml.etree.ParserError(str(e))
except lxml.etree.DocumentInvalid as e:
   if ignore_errors:
    raise lxml.etree.ValidationError("The Config tree is invalid with error 
       message:\n\n" + str(e)) 
def get_validation_errors(xml_file, xsd_uri='example.xsd'):
    xml_string = xml_file.read().decode('utf-8')
    dir_path = os.path.dirname(os.path.realpath(__file__))
    xsd_path = os.path.join(dir_path, xsd_uri)
    schema = xmlschema.XMLSchema(xsd_path)
    validation_error_iterator = schema.iter_errors(xml_string)
    for idx, validation_error in enumerate(validation_error_iterator, start=1):
        print(f'[{idx}] path: {validation_error.path} | reason: {validation_error.reason}')