假设我希望解析XML文档,并且其模式规定给定元素只能出现一次。
如果元素出现两次或更多次,如何确保引发异常?
或者,如果模式表明给定元素的值应该是一个整数,并且值是"火鸡三明治",我该如何使解析器崩溃并像它一样燃烧' ; s应该?
ElementTree可以这样做吗?什么都可以这样做?这个问题是否有意义?
答案 0 :(得分:4)
STD lib中的ElementTree没有架构支持。为此,我建议您使用包含它的lxml包(顺便说一句,它的速度要快得多)。
在我自己的代码中的示例之后:
from lxml import etree
# Create the schema object
with open(xsd_file) as f:
xmlschema_doc = etree.parse(f)
xmlschema = etree.XMLSchema(xmlschema_doc)
# Create a tree for the XML document
doc = etree.parse(xml_text)
# Validate the XML document using the schema
return xmlschema.validate(doc)
或者如果您想要引发异常:
xmlschema.assertValid(doc)