在 Python 中使用 XML 模式进行验证
我有一个 XML 文件和另一个文件中的 XML 架构,我想验证我的 XML 文件是否遵循该架构。 我如何在 Python 中做到这一点?
我更喜欢使用标准库,但如果需要,我可以安装第三方包。
I have an XML file and an XML schema in another file and I'd like to validate that my XML file adheres to the schema. How do I do this in Python?
I'd prefer something using the standard library, but I can install a third-party package if necessary.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
我假设您的意思是使用 XSD 文件。 令人惊讶的是,支持此功能的 Python XML 库并不多。 然而 lxml 确实如此。 检查使用 lxml 进行验证。 该页面还列出了如何使用 lxml 来验证其他架构类型。
I am assuming you mean using XSD files. Surprisingly there aren't many python XML libraries that support this. lxml does however. Check Validation with lxml. The page also lists how to use lxml to validate with other schema types.
Python3 中使用流行库的简单验证器的示例 lxml
安装 lxml
如果您得到出现类似“在 libxml2 库中找不到函数 xmlCheckVersion。安装了 libxml2 吗?”之类的错误,请首先尝试执行此操作:
最简单的验证器
让我们创建最简单的 validator.py
然后编写并运行 main.py
一点点 OOP
为了验证多个文件,无需创建 XMLSchema 每次都会对象,因此:
validator.py
现在我们可以验证目录中的所有文件,如下所示:
main.py
有关更多选项,请阅读此处:使用 lxml 进行验证
An example of a simple validator in Python3 using the popular library lxml
Installation lxml
If you get an error like "Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?", try to do this first:
The simplest validator
Let's create simplest validator.py
then write and run main.py
A little bit of OOP
In order to validate more than one file, there is no need to create an XMLSchema object every time, therefore:
validator.py
Now we can validate all files in the directory as follows:
main.py
For more options read here: Validation with lxml
您可以使用 xmlschema Python 包轻松根据 XML 架构 (XSD) 验证 XML 文件或树。 它是纯 Python,可在 PyPi 上使用,并且没有太多依赖项。
示例 - 验证文件:
如果文件未针对 XSD 进行验证,则该方法会引发异常。 该异常包含一些违规详细信息。
如果你想验证许多文件,你只需要加载 XSD 一次:
如果你不需要异常,你可以像这样验证:
或者,xmlschema 直接作用于文件对象和内存中的 XML 树(使用 xml.etree 创建) .ElementTree 或 lxml)。 例子:
You can easily validate an XML file or tree against an XML Schema (XSD) with the xmlschema Python package. It's pure Python, available on PyPi and doesn't have many dependencies.
Example - validate a file:
The method raises an exception if the file doesn't validate against the XSD. That exception then contains some violation details.
If you want to validate many files you only have to load the XSD once:
If you don't need the exception you can validate like this:
Alternatively, xmlschema directly works on file objects and in memory XML trees (either created with xml.etree.ElementTree or lxml). Example:
至于“纯python”解决方案:包索引列出:
As for "pure python" solutions: the package index lists:
有两种方法(实际上还有更多)可以做到这一点。
1.使用lxml
pip install lxml
<代码>>> xmllint --format --pretty 1 --load-trace --debug --schema /path/to/my_schema_file.xsd /path/to/my_xml_file.xml
There are two ways(actually there are more) that you could do this.
1. using lxml
pip install lxml
>> xmllint --format --pretty 1 --load-trace --debug --schema /path/to/my_schema_file.xsd /path/to/my_xml_file.xml
http://pyxb.sourceforge.net/ 处的 PyXB 包从 XML 架构文档生成 Python 的验证绑定。 它处理几乎所有模式构造并支持多个命名空间。
The PyXB package at http://pyxb.sourceforge.net/ generates validating bindings for Python from XML schema documents. It handles almost every schema construct and supports multiple namespaces.
lxml
通过 http://lxml.de/api 上的测试 提供 etree.DTD /lxml.tests.test_dtd-pysrc.html
lxml provides etree.DTD
from the tests on http://lxml.de/api/lxml.tests.test_dtd-pysrc.html