Python怎么用lxml的RelaxNG验证XML
发布时间:2025-12-16 14:19
发布者:网络
浏览次数:用lxml的RelaxNG验证XML需先加载合法.rng文件或字符串生成验证器,再解析XML为etree对象后调用validate();常见问题包括路径错误、编码不匹配、命名空间未声明及忽略error_log。

用 lxml 的 RelaxNG 验证 XML,
核心是:先加载 RelaxNG 模式(.rng 文件或字符串),再用它校验 XML 文档对象(etree.ElementTree 或 etree.Element)。过程不复杂,但几个细节容易出错。
准备 RelaxNG 模式文件
确保你有一个合法的 .rng 文件(XML 格式),例如 schema.rng:
<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="book">
<interle*e>
<element name="title"><text/></element>
<element name="author"><text/></element>
</interle*e>
</element>
</start>
</grammar>
注意:RNG 必须是 well-formed XML,命名空间要正确;如果用在线或程序生成的 RNG,确认没有遗漏 xmlns 声明。
加载 RNG 并创建验证器
用 etree.RelaxNG 加载模式,返回一个可调用的验证器对象:
Inworld.ai
InWorldAI是一个AI角色开发平台,开发者可以创建具有自然语言、上下文意识和多模态的AI角色,并可以继承到游戏和实时媒体中
178
查看详情
- 从文件加载:
rng = etree.RelaxNG(file="schema.rng") - 从字符串加载:
rng = etree.RelaxNG(etree.fromstring(rng_content)) - 加载失败会抛
etree.RelaxNGParseError,建议加 try/catch
验证 XML 文档
验证前需把 XML 解析为 etree 对象(不能直接传文件路径或字符串):
- 解析 XML:
doc = etree.parse("book.xml")或doc = etree.fromstring(xml_bytes) - 执行验证:
is_valid = rng.validate(doc) - 检查结果:
if not is_valid: print(rng.error_log)—— 错误详情在error_log属性里
常见问题处理
验证失败却不报错?可能原因:
- RNG 文件路径错误,或编码不匹配(建议用
open(..., encoding="utf-8")读取后传入fromstring) - XML 中有未声明的命名空间,而 RNG 没做适配(RNG 默认不处理 NS,如需支持,得在 RNG 中显式声明
ns并用name或attribute匹配) -
validate()只返回布尔值,必须主动查error_log才能看到具体哪行哪列出错
基本上就这些。只要 RNG 合法、XML 可解析、验证调用顺序对,就能跑通。
以上就是Python怎么用lxml的RelaxNG验证XML的详细内容,更多请关注其它相关文章!
# python
# 编码
# 常见问题
# 加载
# 文档
# 怎么处理
# 换行
# 不匹配
# 是一个
# 几个
# 自然语言
# 就能
# 中有
# 昆明seo实操
# 本溪品牌网站建设地址
# 塘厦电子网站优化在哪儿
# 焦作知名seo优化电话
# 音乐节的推广 营销
# 苏州营销推广分析
# 建材seo入门
# 细心的泉州seo价位
# 新品牌年度营销推广计划
# 日照网络营销推广价目表




