【发布时间】:2012-09-01 14:06:07
【问题描述】:
我正在使用 Python lxml 库来解析 xml 文件。我需要根据 xml 模式验证 xml 文件。 lxml 支持 XML 模式验证,但必须提供 xml 模式文件路径/内容(此处提供信息:http://lxml.de/validation.html)。但是,我事先并不知道 xml 架构文件路径,它应该从 xml 文件头标签中解析出来。我找不到访问这些标签的方法。
lxml 以某种方式支持这个用例?
【问题讨论】:
我正在使用 Python lxml 库来解析 xml 文件。我需要根据 xml 模式验证 xml 文件。 lxml 支持 XML 模式验证,但必须提供 xml 模式文件路径/内容(此处提供信息:http://lxml.de/validation.html)。但是,我事先并不知道 xml 架构文件路径,它应该从 xml 文件头标签中解析出来。我找不到访问这些标签的方法。
lxml 以某种方式支持这个用例?
【问题讨论】:
如果架构是使用根元素上的属性链接的,则在 http://www.w3.org/2001/XMLSchema-instance 命名空间中,您可以使用 lxml 通过在属性名称前加上大括号中的命名空间 URL 来检索这些:
XMLSchemaNamespace = '{http://www.w3.org/2001/XMLSchema-instance}'
document = lxml.parse(xmlfile)
schemaLink = document.get(XMLSchemaNamespace + 'schemaLocation')
if schemaLink is None:
schemaLink = document.get(XMLSchemaNamespace + 'noNamespaceSchemaLocation')
然后使用 URL 库从引用的位置加载架构。请参阅lxml namespace handling 了解更多信息。
【讨论】: