2
私はXSDに対してXML文書を検証し、次のコードを持っている:これはPython2.7では動作しますが、Python3.5では動作しないのはなぜですか?
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では、私は次の例外を取得:
lxml.etree.XMLSyntaxError: Element 'testElement', attribute 'intAttr': '' is not a valid value of the atomic type 'xs:positiveInteger'.
パーサは「testElement」要素の「intAttr」属性の「10」の値を読み取るされていないと思われます。誰かが私が間違っていることを知っていますか?
私のインターピターに上記のコードをコピーすると、2.7と3.5の両方でうまくいきます。 intAttr = "10"をintAttr = ""に置き換えてエラーを再現できます。 exeptionは空文字列が有効な整数ではないことを示します。あなたの実際のコードの上にあるか、それとも単なる表象ですか? – Maarten
本当ですか?今それは面白いスーパーです。それは実際のコードです。これはPython3.5とPython2.7の間で何か変わる問題(言語自体またはlxmlライブラリのいずれか)の問題ではなく、実際のPython 3.5のインストールに問題があることを示していると思います。私はちょうどこのページのコードを貼り付けてコピーし、私のpython3.5インタプリタに何が起こるかを見てみると、同じエラーが出ます。私はDebianの "testing"のPython3.5パッケージを使用していますので、おそらくそれと関係があります。 –
私の正確なpythonバージョンは3.5.2(と2.7.12)のubuntuで動作します。あなたのバージョンと比較する必要がある場合。 2.7では、外部依存としてlxmlをインストールする必要がありました。 – Maarten