我试图使用Python解析一个位于下面所示文件路径中的特定XSD文件(File1.xsd),但是在该文件路径中存在多个具有相同文件扩展名的文件(File2.xsd和File3.xsd)。 File1.xsd将被用来验证一个xml与File1.xsd模式的关系,但我无法解析这个单一的XSD文件的文件路径(根据 "xml_validator "函数)。
有谁知道如何调整增强代码,使其只查找File1.xsd,并以同样的技术应用于具有相同文件扩展名的多个文件的目录--根据 "is_valid "函数,输出将是一个布尔表达式,任何帮助都是非常感激的。
import os
import glob
import lxml
from lxml import etree
from lxml.etree import XMLSchema
import xmlschema
path = "C:\\Users\\mdl518\\Desktop\\Data\\"
def validation():
for filename in glob.glob(os.path.join(path, "*.xml")):
with open(filename,'r') as f:
xml_file=lxml.etree.parse(f)
xml_validator=lxml.etree.XMLSchema(file="<path_to_File1.xsd">))
is_valid=xml_validator.validate(xml_file)
print(is_valid)
return
validation()
你可以将你需要的文件作为验证器打开(File1.xsd
),对其进行解析,然后再循环执行。.xml
文件,将xml_validator一行替换为:xml_validator=lxml.etree.XMLSchema(os.path.join(path,filename.replace(".xml"))。
path = "C:\\Users\\mdl518\\Desktop\\Data\\"
def validation():
with open(f"{path}File1.xsd", 'r') as filxsd:
xml_validator = XMLSchema(file=filxsd)
for fil in glob.glob(f"{path}*.xml"):
with open(fil, 'r') as f:
xml_file = lxml.etree.parse(f)
is_valid = xml_validator.validate(xml_file)
print(is_valid)
将xml_validator一行替换为:xml_validator=lxml.etree.XMLSchema(os.path.join(path,filename.replace(".xml",".xsd")))
我假设你的文件名最后只包含字符串".xml",如果你的文件名像 "my.xmlfile.xml",你应该只替换最后的".xml "实例。