Hello
I am facing an issue using objecjtify.parse when I provide a parser.
The function rise lxml.etree.XMLSyntaxError, but I don't understand why.
My file validate :
>xmllint --noout --schema XMLSchema.xsd myxsd.xsd
myxsd.xsd validates
from __future__ import print_function
from lxml import etree
from lxml import objectify
print("libxml_version:"+str(etree.LIBXML_VERSION))
print("libxslt_version:"+str(etree.LIBXSLT_VERSION))
print("lxml_version:"+str(etree.LXML_VERSION))
rawXMLSchema = etree.parse('XMLSchema.xsd')
XMLSchema = etree.XMLSchema(rawXMLSchema)
doc = etree.parse("myxsd.xsd")
valid = XMLSchema.validate(doc)
print ('valid: {var}'.format(var=valid))
XMLSchemaParser = objectify.makeparser(schema = XMLSchema)
root = objectify.parse('myxsd.xsd',parser=XMLSchemaParser)
print("done")
Also the exception message is different according to lxml version:
libxml_version:(2, 9, 3)
libxslt_version:(1, 1, 28)
lxml_version:(3, 5, 0, 0)
lxml.etree.XMLSyntaxError: Element
'{http://www.w3.org/2001/XMLSchema}attribute', attribute 'ref': The
QName value 'xml:id' has no corresponding namespace declaration in
scope.
After pip install --user -U lxml
libxml_version:(2, 9, 4)
libxslt_version:(1, 1, 29)
lxml_version:(3, 6, 4, 0)
lxml.etree.XMLSyntaxError: Element
'{http://www.w3.org/2001/XMLSchema}simpleType', attribute 'name': ''
is not a valid value of the atomic type 'xs:NCName'.
How lxml can report libxml_version:(2, 9, 4) while I can only find
libxml2.so.2.9.3 on my system ?
I am on Ubuntu 16.04.1
Is the issue coming from my file or from the tool ?
I see a previous post on this mailing list where libxml2 version 2.9.4
was the one to blame. But in current case I try with 2 different
versions and my knowledge of xml, lxml and libxml2 can't help me
to conclude. Any help would be welcome.
Thomas