2

在 Python/Django 中,我需要根据给定的 XMLSchema 解析和对象化文件 .xml ,该 XMLSchema 由三个 .xsd 文件组成,以这种方式相互引用:

schema3.xsd(参考 schema1.xsd)

schema2.xsd(指 schema1.xsd)

schema1.xsd(指 schema2.xsd)

xml 模式导入

为此,我使用了以下代码,我已经测试过它在与几个 xml/xsd 文件一起使用时是成功的(其中 .xsd 是“独立的”而不引用其他 .xsd):

导入 lxml
导入 os.path
从 lxml 导入 etree,对象化
从 lxml.etree 导入 XMLSyntaxError

def xml_validator(请求):

    # 定义文件路径
    path_file_xml = '../myxmlfile.xml'
    path_file_xsd = '../schema3.xsd'    

    # 获取文件 XML
    xml_file = open(path_file_xml, 'r')
    xml_string = xml_file.read()
    xml_file.close()

    # 获取 XML 架构
    doc = etree.parse(path_file_xsd)
    架构 = etree.XMLSchema(doc)

    #定义解析器
    parser = objectify.makeparser(schema=schema)

    # 转换 XML 文件
    root = objectify.fromstring(xml_string, 解析器)
    test1 = root.tag
    
    返回渲染(请求,'risultati.html',{'risultato':test1})

不幸的是,我遇到了上面描述的多个 .xsd 时遇到的以下错误:

复杂类型“ObjectType”:内容模型不是确定性的。

请求方法:GET 请求地址: http: //127.0.0.1 :8000/xml_validator

Django 版本:1.9.1 异常类型:XMLSchemaParseError 异常

值:复杂类型“ObjectType”:内容模型不是确定性的。,第 80 行

有什么想法吗?

非常感谢您提供解决此问题的任何建议或有用的提示...

干杯

2016 年 3 月 23 日更新

在这里(以及在帖子的以下答案中,因为它实际上超过了帖子的最大字符数),一个文件样本来找出问题......

GitHub 上的示例文件

4

1 回答 1

0

我最好的猜测是您的 XSD 模型不遵守唯一粒子属性规则。在看其他任何东西之前,我会排除这一点。

于 2016-01-18T12:26:15.400 回答