gpt4 book ai didi

python - 针对架构的 XML (.xsd) 提要验证

转载 作者:IT老高 更新时间:2023-10-28 21:01:24 24 4
gpt4 key购买 nike

我有一个 XML 文件和一个 XML 模式。我想根据该架构验证文件并检查它是否符合该架构。我正在使用 python,但如果 python 中没有这样有用的库,我对任何语言都是开放的。

我最好的选择是什么?我会担心我能以多快的速度启动并运行它。

最佳答案

绝对是 lxml .

定义 XMLParser 使用预定义的模式,加载文件 fromstring()并捕获任何 XML Schema 错误:

from lxml import etree

def validate(xmlparser, xmlfilename):
try:
with open(xmlfilename, 'r') as f:
etree.fromstring(f.read(), xmlparser)
return True
except etree.XMLSchemaError:
return False

schema_file = 'schema.xsd'
with open(schema_file, 'r') as f:
schema_root = etree.XML(f.read())

schema = etree.XMLSchema(schema_root)
xmlparser = etree.XMLParser(schema=schema)

filenames = ['input1.xml', 'input2.xml', 'input3.xml']
for filename in filenames:
if validate(xmlparser, filename):
print("%s validates" % filename)
else:
print("%s doesn't validate" % filename)

关于编码的注意事项

如果架构文件包含带有编码的 xml 标签(例如 <?xml version="1.0" encoding="UTF-8"?> ),上面的代码将生成以下错误:

Traceback (most recent call last):
File "<input>", line 2, in <module>
schema_root = etree.XML(f.read())
File "src/lxml/etree.pyx", line 3192, in lxml.etree.XML
File "src/lxml/parser.pxi", line 1872, in lxml.etree._parseMemoryDocument
ValueError: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.

A solution是以字节模式打开文件:open(..., 'rb')

[...]
def validate(xmlparser, xmlfilename):
try:
with open(xmlfilename, 'rb') as f:
[...]
with open(schema_file, 'rb') as f:
[...]

关于python - 针对架构的 XML (.xsd) 提要验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17819884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com