Как проверить XML с вложенными элементами в Python? - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь написать XML с рекурсивно вложенными элементами.Я хотел бы создать что-то вроде:

main.xsd: определить элементы корня и фрейма.

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:include schemaLocation="sub.xsd"/>

<xsd:element name="root" type="element"/>

<xsd:element name="frame" type="element"/>

<xsd:complexType name="element" mixed="true">
    <xsd:choice >
        <xsd:element name="subelement" type="sub" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="frame" type="element" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:choice>
    <xsd:attribute name="id" use="optional" type="xsd:string"/>
</xsd:complexType>

sub.xsd: определить новый субэлемент sub.

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="sub" type="sometype"/>

<xsd:complexType name="sometype" mixed="true">
    <xsd:choice >
        <xsd:element name="somelement" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:>
    <xsd:attribute name="id" use="optional" type="xsd:string"/>
</xsd:complexType>

Я хочу проверить приведенный ниже файл xml на python.Я использую lxml / elementree для этого простого xml:

<?xml version="1.0"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="main.xsd"
<root>
    <frame>
        <sub/>
    </frame>
</root>

Идея состоит в том, чтобы иметь элементы типа фрейма, которые могут рекурсивно содержать в себе неограниченные фреймы и подэлементы, следовательно, неограниченные. Проблема в том, что я не могу заставить проверку работать. Правильно ли я определяю xml и xsd? Правильна ли рекурсивная структура для xsd?Там будет несколько элементов, таких как sub.Пример является самым простым (я думаю).Я использую pycharm, поэтому я не вижу никаких ошибок в редакторе, но проверка с помощью lxml не проходит.Могут ли некоторые предоставить решение, которое может быть проверено с использованием libxml в этом случае, когда разные подэлементы определены в разных xsd.

Дайте мне знать, если нужна дополнительная информация.Это первый раз, когда я создаю схему с нуля, так что извините за мой xml.Я проверил другие примеры в стеке, где были определены рекурсивные элементы, но я не могу заставить их работать.Не уверен, что я делаю не так.Любая помощь очень ценится.

Спасибо

...