我正在尝试使用lxml针对B2MML架构(多个XSD文档)验证一个简单的XML文档。 lxml返回"没有可用于验证根的匹配全局声明。"之前已发布此类问题,但没有一个解决方案似乎有效。
需要验证的XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<MaterialLot xmlns="http://www.w3.org/2001/XMLSchema">
<ID>000010002377</ID>
</MaterialLot>
用于验证文档的代码:
def validate_xml(xmlschemafile, xmlfilename):
with open(xmlschemafile, 'r') as f:
schema_root = etree.XML(f.read())
schema = etree.XMLSchema(schema_root)
xmlparser = etree.XMLParser(schema=schema)
try:
with open(xmlfilename, 'r') as f:
etree.fromstring(f.read(), xmlparser)
return True
if __name__ == '__main__':
validate_xml(xmlschema, filename)
这里可以找到B2MML模式文件: https://github.com/werdnav/b2mml-validation
XSD名称空间为&#39; http://www.w3.org/2001/XMLSchema&#39; (从XSD文档中读取)与XML示例完全匹配。但是,验证器代码(上面)返回:
Element '{http://www.w3.org/2001/XMLSchema}MaterialLot': No matching global declaration available for the validation root.
这是非常奇怪的,因为MaterialLot是全局声明的。