栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

针对模式的XML(.xsd)提要验证

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

针对模式的XML(.xsd)提要验证

绝对可以

lxml

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

from lxml import etreedef validate(xmlparser, xmlfilename):    try:        with open(xmlfilename, 'r') as f: etree.fromstring(f.read(), xmlparser)         return True    except etree.XMLSchemaError:        return Falseschema_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 version="1.0" encoding="UTF-8"?>
)的xml标记,则上面的代码将产生以下错误:

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._parseMemorydocumentValueError: Unipre strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.

一种解决方案是以字节模式打开文件:

open(..., 'rb')

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/614277.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号