Мне нужно прочитать файл схемы XML и извлечь только те элементы, которые имеют поле minOccurs="0"
.Но я сталкиваюсь с проблемой, когда анализатор XML пропускает эти поля при анализе документа.
Это так же, как я покажу вам в коде ниже.
У меня есть пример XML-файла:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:include schemaLocation="def.xml"/>
<xsd:element name="MainElementName">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="A">
<xsd:complexType>
<xsd:attribute name="AA" required="False" type="string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="B" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="BA" type="string"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Затем я анализирую его с помощью этого кода:
with open(xsd_path, 'r'):
try:
parser = et.XMLParser(remove_blank_text=True)
tree = et.parse(xsd_path, parser)
tmp_text = et.tostring(tree, pretty_print=True, encoding=str)
except IOError as e:
print(e)
И я получаю вывод:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:include schemaLocation="def.xml"/>
<xsd:element name="MainElementName">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="A">
<xsd:complexType>
<xsd:attribute name="AA" type="string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="B">
<xsd:complexType>
<xsd:attribute name="BA" type="string"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Я не знаю, почему анализатор пропускает поле required
в атрибуте и min/maxOccurs
в элементе.Кто-нибудь знает, как это решить?