検証したいXMLファイルがあり、Pythonで実行する必要があります。私はlxmlを使用したXSDでそれを検証しようとしました。しかし、最初に発生するエラーは1つだけですが、XMLファイルのすべてのエラーと不一致が必要です。lxmlですべてのエラーのリストを取得する方法はありますか?または、他のPythonソリューションはありますか?
質問する
3926 次
6 に答える
6
この問題を解決する方法は次のとおりです。
try: xmlschema.assertValid(xml_to_validate) except etree.DocumentInvalid, xml_errors: pass print "List of errors:\r\n", xml_errors.error_log
この問題を解決するためのより良い方法があるかもしれません:)
于 2012-07-23T11:18:58.373 に答える
2
を使用すると、エラーごとに行番号とエラーメッセージをlxml
繰り返して出力できます。error_log
def validate_with_lxml(xsd_tree, xml_tree):
schema = lxml.etree.XMLSchema(xsd_tree)
try:
schema.assertValid(xml_tree)
except lxml.etree.DocumentInvalid:
print("Validation error(s):")
for error in schema.error_log:
print(" Line {}: {}".format(error.line, error.message))
于 2019-06-26T17:03:21.130 に答える
2
XMLSchemaライブラリを使用すると、次のiter_errors
方法に頼ることができます:https ://xmlschema.readthedocs.io/en/latest/api.html?highlight=iter_errors#xmlschema.XMLSchemaBase.iter_errors
ここに私のコード(Python 3):
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}')
于 2020-10-18T18:36:35.263 に答える
1
エラー例外に関するPythonのドキュメントを読んで、
try/except
デザインパターンを実行する方法を見つけることexcept
ができます。また、一部では、不一致(リスト、またはペアのリストなど)を格納してから、その後のポイントから再帰的にtry/except
再開することができます。最初のエラー。それが十分に説明的でない場合は私に知らせてください。
乾杯!
于 2012-07-20T18:28:17.857 に答える
0
提供されたソリューションは、いくつかのエラーのために機能しなくなりました。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))
于 2018-06-29T11:18:23.423 に答える
0
def get_validation_errors(xml_file, xsd_file):
schema = xmlschema.XMLSchema(xsd_file)
validation_error_iterator = schema.iter_errors(xml_file)
errors = list()
for idx, validation_error in enumerate(validation_error_iterator, start=1):
errors.append(validation_error.__str__())
print(
f'[{idx}] path: {validation_error.path} | reason: {validation_error.reason} | message: {validation_error.message}')
return errors
于 2021-06-23T07:25:07.697 に答える