Python: Как проверить, является ли строка XML действительной XML - PullRequest
0 голосов
/ 24 января 2020

Я пишу программу, которая получит строку через стандартный ввод. Строка всегда будет иметь root узел <Exam> и два дочерних узла: <Question> и <Answer>. Что это за функция, которая проверяет, правильно ли отформатирован XML (не пропущены ли теги или угловые скобки)?

Я пытался использовать etree, но сталкиваюсь с ошибками:

def isProperlyFormattedXML():
    parser = etree.XMLParser(dtd_validation=True)
    schema_root = etree.XML('''\
        <Exam>
            <Question type="Short Response">
                What does OOP stand for?
            </Question>
            <Answer type="Short Response">
                "Object Oriented programming"
            </Answer>
        </Exam>
        ''')
    schema = etree.XMLSchema(schema_root)

    #Good xml
    parser = etree.XMLParser(schema = schema)
    try:
        root = etree.fromstring("<a>5</a>", parser)
        print ("Finished validating good xml")

        return True
    except lxml.etree.XMLSyntaxError as err:
        print (err)

    #Bad xml
    parser = etree.XMLParser(schema = schema)
    try:
        root = etree.fromstring("<a>5<b>foobar</b></a>", parser)
    except lxml.etree.XMLSyntaxError as err:
        print (err)
        return False

Ошибка:

lxml.etree.XMLSchemaParseError: The XML document 'in_memory_buffer' is not a schema document.```

1 Ответ

0 голосов
/ 24 января 2020

У вас уже есть решение. Вы должны использовать try / кроме того, чтобы проверить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...