用lxml的RelaxNG验证XML需先加载合法.rng文件或字符串生成验证器,再解析XML为etree对象后调用validate();常见问题包括路径错误、编码不匹配、命名空间未声明及忽略error_log。

用 lxml 的 RelaxNG 验证 XML,核心是:先加载 RelaxNG 模式(.rng 文件或字符串),再用它校验 XML 文档对象(etree.ElementTree 或 etree.Element)。过程不复杂,但几个细节容易出错。
确保你有一个合法的 .rng 文件(XML 格式),例如 schema.rng:
<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="book">
<interleave>
<element name="title"><text/></element>
<element name="author"><text/></element>
</interleave>
</element>
</start>
</grammar>注意:RNG 必须是 well-formed XML,命名空间要正确;如果用在线或程序生成的 RNG,确认没有遗漏 xmlns 声明。
用 etree.RelaxNG 加载模式,返回一个可调用的验证器对象:
立即学习“Python免费学习笔记(深入)”;
rng = etree.RelaxNG(file="schema.rng")
rng = etree.RelaxNG(etree.fromstring(rng_content))
etree.RelaxNGParseError,建议加 try/catch验证前需把 XML 解析为 etree 对象(不能直接传文件路径或字符串):
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 属性里验证失败却不报错?可能原因:
open(..., encoding="utf-8") 读取后传入 fromstring)ns 并用 name 或 attribute 匹配)validate() 只返回布尔值,必须主动查 error_log 才能看到具体哪行哪列出错基本上就这些。只要 RNG 合法、XML 可解析、验证调用顺序对,就能跑通。
以上就是Python怎么用lxml的RelaxNG验证XML的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号