以下是引用有效XML架构(1.xsd)和任意XML(1.xml)的python代码:
1.xsd:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="product"/>
</xs:schema>
1.XML:
<?xml version="1.0" encoding="utf-8" ?>
<my-product/>
main.py:
from lxml.etree import XMLParser, XMLSchema, parse, XMLSyntaxError
parser = XMLParser(schema=XMLSchema(file='1.xsd'))
try:
xml = parse(open('1.xml', mode='rb'), parser)
except XMLSyntaxError as e:
for error in parser.error_log:
print error.message, error.line, error.column
输出:
元素'my-product':验证根目录没有可用的匹配全局声明。 0 0
error.line 和 error.column 始终为 0 。 我怎样才能得到错误的位置?
UPD
此代码给出了正确的位置,但缺少双重解析:
from lxml.etree import XMLParser, XMLSchema, parse, XMLSyntaxError, XML
schema=XMLSchema(file='1.xsd')
parser = XMLParser(schema=schema)
xml_file = open('1.xml', mode='rb')
xml = XML(xml_file.read())
if not schema.validate(xml):
for error in schema.error_log:
print error.message, error.line, error.column
else:
xml = parse(xml_file, parser)
元素'my-product':验证根目录没有可用的匹配全局声明。 2 0