在python lxml

时间:2018-07-21 22:24:15

标签: python xsd lxml

我遇到了使用lxml库在python中创建xsd模式的问题。 我已经在下面准备了一个xsd模式文件(内容已减少到最小)

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified"
           version="2.4">
    <xs:annotation>
        <xs:documentation xml:lang="de">Bundeseinheitlicher Medikationsplan</xs:documentation>
    </xs:annotation>
    <xs:element name="MP">
        <xs:annotation>
            <xs:documentation>Bundeseinheitlicher Medikationsplan</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="p" use="prohibited">
                <xs:annotation>
                    <xs:documentation>Name: Patchnummer</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:int">
                        <xs:minInclusive value="0"/>
                        <xs:maxInclusive value="99"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
</xs:schema>

,并且在使用lxml库创建这样的xsd模式时

from lxml import etree
with open('some_file.xsd') as schema_file:  # some_file.xsd is the file above
    etree.XMLSchema(file=schema_file)

我收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "src/lxml/xmlschema.pxi", line 87, in lxml.etree.XMLSchema.__init__ (src/lxml/lxml.etree.c:197804)
lxml.etree.XMLSchemaParseError: Element '{http://www.w3.org/2001/XMLSchema}attribute': The content is not valid. Expected is (annotation?)., line 16

但是当使用python标准库执行此操作时,一切都会正确

import xml.etree.ElementTree as ET
with open('some_file.xsd') as f:
    tree = ET.parse(f)

我在xsd文件上玩了一下,发现删除时 来自attribiute元素的use="prohibited"解决了lxml库的问题,但我需要该属性。

这可能是什么原因? lxml库是否存在问题,或者上述xsd的xml结构不正确?

0 个答案:

没有答案