解析XML时无法正确识别合适的“联合”成员类型

时间:2018-08-06 08:16:34

标签: xml xsd xsd-validation pyxb

我已经为XSD提供了以下类型的AnySimple定义(我不知道为什么定义了这种类型,但是无论如何它都与xsd:anySimpleType不同):< / p>

<?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:Core="http://www.foo.com/Core/PrimitiveTypes" targetNamespace="http://www.foo.com/Core/PrimitiveTypes" elementFormDefault="unqualified" attributeFormDefault="unqualified">

        <xsd:simpleType name="AnySimple">
            <xsd:annotation>
                <xsd:documentation>container for any simple type</xsd:documentation>
            </xsd:annotation>
            <xsd:union memberTypes="xsd:string xsd:boolean xsd:byte xsd:short xsd:int xsd:long xsd:unsignedByte xsd:unsignedShort xsd:unsignedInt xsd:unsignedLong xsd:float xsd:double xsd:dateTime xsd:duration"/>
        </xsd:simpleType>
        ...

在使用pyxb从此XSD生成Python代码之后,当我解析一个我知道是有效的XML文档时,我收到以下错误,该错误指出xsd:int不能是{{1} }

AnySimple

出了什么问题?


编辑:

作为参考,这是为File "/usr/lib/python3/dist-packages/pyxb/namespace/builtin.py", line 133, in _InterpretTypeAttribute raise pyxb.BadDocumentError('%s value %s is not subclass of element type %s' % (type_name, type_en, type_class._ExpandedName)) pyxb.exceptions_.BadDocumentError: xsd:int value {http://www.w3.org/2001/XMLSchema}int is not subclass of element type {http://www.foo.com/Core/PrimitiveTypes}AnySimple 类型生成的代码,其中的成员列表似乎是正确的:

AnySimple

1 个答案:

答案 0 :(得分:0)

这似乎与此问题有关,可以在PyXB的文档中找到:http://pyxb.sourceforge.net/userref_usebind.html#coping-with-wrong-xsi-type-attributes

可以通过在XML文件的解析之前在代码中添加一行来解决该错误,从而放宽XML解释的严格性:

pyxb.namespace.builtin.XMLSchema_instance.ProcessTypeAttribute(
    pyxb.namespace.builtin._XMLSchema_instance.PT_lax)