lxml:使用XMLSchema进行XML验证不会给出错误的位置

时间:2016-07-05 18:10:49

标签: python xml validation xsd lxml

以下是引用有效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

0 个答案:

没有答案