У меня есть следующий код Python + lxml:
def doXMLValidation (xml_file, schema_file):
'''Validates xml file against schema'''
s_doc = etree.parse (schema_file)
schema = etree.XMLSchema (s_doc)
x_file = etree.parse(xml_file)
try:
schema.assertValid(x_file)
except etree.XMLSyntaxError as e:
print (_formatXMLError(e))
return False
except etree.DocumentInvalid as e:
print (_formatXMLError(e))
return False
except:
print ('Something strange...')
return False
else:
return True
Когда я пытаюсь проверить его с поврежденным файлом xml / fb2 (тег удален), я ожидаю получить исключение XMLSyntaxError с правильной обработкой.Однако вместо этого я получаю сбой с этой ошибкой:
.. /. Metadata / .plugins / org.python.pydev.debug / .coverage Traceback (последний вызов был последним):
Файл "../.eclipse/org.eclipse.platform_3.5.0_155965261/plugins/org.python.pydev.debug_1.5.9.2010063001/pysrc/coverage.py", строка 1029, в the_coverage.command_line (sys.argv [1:]) Файл "../.eclipse/org.eclipse.platform_3.5.0_155965261/plugins/org.python.pydev.debug_1.5.9.2010063001/pysrc/coverage.py", строка 405, в файле командной строки execfile (sys.argv [0], main ._ dict _) Файл "../workspace/PythonPractice/src/lxmlValidation.py", строка 58, в файле test () "../workspace/PythonPractice/src/lxmlValidation.py ", строка 54, в результате теста = doXMLValidation (источник, схема) Файл" ../workspace/PythonPractice/src/lxmlValidation.py ", строка 31, в doXMLValidation x_file = etree.parse (xml_file) Файл "lxml.etree.pyx", строка 2692, в lxml.etree.parse (src / lxml / lxml.etree.c: 49594) Файл "parser.pxi", строка 1500, в lxml.etree._parseDocument (src / lxml / lxml.etree.c: 71364) Файл "parser.pxi", строка 1529, в lxml.etree._parseDocumentFromURL (src / lxml / lxml.etree.c: 71647) Файл "parser.pxi",строка 1429, в lxml.etree._parseDocFromFile (src / lxml / lxml.etree.c: 70742) Файл "parser.pxi", строка 975, в lxml.etree._BaseParser._parseDocFromFile (src / lxree / lxml.: 67740) Файл "parser.pxi", строка 539, в lxml.etree._ParserContext._handleParseResultDoc (src / lxml / lxml.etree.c: 63824) Файл "parser.pxi", строка 625, в lxml.etree._handleParse(src / lxml / lxml.etree.c: 64745) Файл "parser.pxi", строка 565, в lxml.etree._raiseParseError (src / lxml / lxml.etree.c: 64088) lxml.etree.XMLSyntaxError: Несоответствие открывающего и завершающего тегов: строка 7 и p, строка 7, столбец 46
В чем может быть проблема и как ее решить?
UPD: Lol, понял, спасибо всем:
def doXMLValidation (xml_file, schema_file):
'''Validates xml file against schema'''
s_doc = etree.parse (schema_file)
schema = etree.XMLSchema (s_doc)
try:
x_file = etree.parse(xml_file)
schema.assertValid(x_file)
except etree.XMLSyntaxError as e:
print (_formatXMLError(e))
return False
except etree.DocumentInvalid as e:
print (_formatXMLError(e))
return False
except:
print ('Something strange...')
return False
else:
return True
Мысль, что lxml будет более приятным при разборе ...