如何使Python的ElementTree强制执行XML模式?

时间:2014-07-14 03:08:23

标签: python xml

假设我希望解析XML文档,并且其模式规定给定元素只能出现一次。

如果元素出现两次或更多次,如何确保引发异常?

或者,如果模式表明给定元素的值应该是一个整数,并且值是"火鸡三明治",我该如何使解析器崩溃并像它一样燃烧' ; s应该?

ElementTree可以这样做吗?什么都可以这样做?这个问题是否有意义?

1 个答案:

答案 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)