我正在使用 python 2.7 和 lxml 来验证带有 RelaxNG 的大型 xml 文件。当 xml 无法正确验证时,我会得到关于问题位置和性质的不准确结果。通常它只是说:“元素元素名称无法验证内容” - 其中元素名称只是最顶层元素的名称。
当我在 Java 中使用相同的 xml 和相同的relaxng 文件时,我得到了错误所在的确切行号。这是我正在使用的代码:
from lxml import etree as ET
def ValidateXMLWithRNG(rng_file, xml_file):
isXMLValid = False
try:
doc = ET.ElementTree()
doc.parse(xml_file)
relaxng = ET.RelaxNG(file=rng_file)
isXMLValid = relaxng.assert_(doc)
except BaseException as ex:
log = relaxng.error_log
print log.last_error
return isXMLValid
有没有办法从 lxml 和 RelaxNG 获得更准确的结果?