xml架构验证:如何返回无效元素



如何从.xml文件返回状态无效的元素、行或标记。

我正在使用这个程序(下面的链接(

使用python 验证xml架构

或者你可以找到下面的代码:

验证器.py

from lxml import etree
class Validator:
def __init__(self, xsd_path: str):
xmlschema_doc = etree.parse(xsd_path)
self.xmlschema = etree.XMLSchema(xmlschema_doc)
def validate(self, xml_path: str) -> bool:
xml_doc = etree.parse(xml_path)
result = self.xmlschema.validate(xml_doc)
return result

主要.py

import os
from validator import Validator
validator = Validator("path/to/scheme.xsd")
# The directory with XML files
XML_DIR = "path/to/directory"
for file_name in os.listdir(XML_DIR):
print('{}: '.format(file_name), end='')
file_path = '{}/{}'.format(XML_DIR, file_name)
if validator.validate(file_path):
print('Valid! :)')
else:
print('Not valid! :(')

当我运行这个代码时,我得到了这个结果,

FILE_1.xml: Valid! :) FILE_2.xml: Valid! :) FILE_3.xml: Not valid! :( FILE_4.xml: Valid! :)

我的问题是,我没有关于哪条规则被打破的信息,换句话说,FILE_3.xml中的哪一行破坏了xsd文件中的规则。如何返回此信息?

如果你能帮助,谢谢你

您需要使用assertValid而不是validate。这将使得当文档无效时,您要查找的数据将引发异常。

请参阅https://lxml.de/validation.html(查找"如果您希望在验证时获得异常,可以使用assert_或assertValid方法"(

xml_doc = etree.parse(xml_path)
try:
xmlschema.assertValid(xml_doc)
except Exception as e:
return False,str(e) 
return True,'' 

最新更新