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

Gar*_*ett 1 python xml

假设我想解析一个XML文档,并且它的模式指示给定的元素只能出现一次。

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

或者,如果架构指出给定元素的值应该是整数,并且值是“土耳其三明治”,那么如何使解析器崩溃并像预期的那样刻录?

ElementTree可以这样做吗?有什么可以做的吗?这个问题甚至有意义吗?

Ant*_*ine 5

STD库中的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)
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望引发异常:

xmlschema.assertValid(doc)
Run Code Online (Sandbox Code Playgroud)