为什么这在Python2.7中有效,而在Python3.5中不起作用?

2024-10-02 20:36:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码,用于根据XSD验证XML文档:

import lxml
import lxml.etree

xsd_definition = lxml.etree.XML('''\
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                elementFormDefault="qualified">
        <xs:element name="test" type="testType"/>
        <xs:complexType name="testType">
            <xs:sequence>
                <xs:element name="testElement" type="testElementType"/>
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="testElementType">
            <xs:attribute name="intAttr" type="xs:positiveInteger" use="required"/>
        </xs:complexType>
    </xs:schema>
''')
xsd = lxml.etree.XMLSchema(xsd_definition)
parser = lxml.etree.XMLParser(schema=xsd)

test_xml = '''\
    <test>
        <testElement intAttr="10"/>
    </test>
'''
lxml.etree.fromstring(test_xml, parser)

这在Python2.7中有效,但在Python3.5中不起作用。在Python3.5中,我得到了以下异常:

^{pr2}$

解析器似乎没有读取“testElement”元素的“intAttr”属性的值“10”。有人知道我做错了什么吗?在


Tags: nametestimportschematypexmllxmlxmlschema
1条回答
网友
1楼 · 发布于 2024-10-02 20:36:03

显然问题出在我使用的lxml版本上。我在python2.7中使用的lxml版本是3.7,而python3.5使用的版本是3.8。出现这种差异的原因是,我使用Debian的lxml包安装lxml for python2.7,而我使用pip安装lxml for python3.5。一旦我将python3.5降到3.7版本,问题就消失了。在

相关问题 更多 >