Python ElementTree исключение "элемент не найден" - PullRequest
0 голосов
/ 16 апреля 2020

import:

import io
import xml.etree.ElementTree as ElementTree

ПРИМЕЧАНИЕ : я рассмотрел другие потоки в этом же исключении, и все они отметили, что потенциальная проблема заключается в том, что файл XML может быть уродливым; Я абсолютно уверен, что мой хорошо сформирован, после многократной проверки, а затем проверил его через онлайн-валидатор, чтобы просто дважды проверить.

По существу, у меня возникают проблемы с вызовом функции Python ElementTree.parse () для файлового объекта io.StringIO. Я знаю, что эта операция работает, потому что работает следующий код, который находится непосредственно над кодом проблемы:

testXMLInput = io.StringIO("<timedmile><miles>1</miles><minutes>1</minutes><seconds>1</seconds><month>1</month><day>1</day><year>1</year></timedmile>")
myElementTree = ElementTree.parse(testXMLInput)

Однако следующий код не работает:

xmlOutput = io.StringIO("<logdata><timedmiles></timedmiles></logdata>")
testElementTree = ElementTree.parse(xmlOutput)

I попытался вставить значение в элемент timedmiles, но это не помешало вызвать следующее исключение:

xml.etree.ElementTree.ParseError: no element found: line 1, column 0

В чем может быть проблема? Документация и другие темы, кажется, не упоминают другую причину этого исключения.

1 Ответ

0 голосов
/ 16 апреля 2020

Может быть, вы используете устаревшую версию ElementTree?

Запустите ElementTree.VERSION, чтобы получить версию.

Я использую версию 1.3.0 и не получил Ваша ошибка (в обоих случаях). Может быть, вам стоит обновить программное обеспечение?

У меня есть еще одно замечание: после того, как вы проанализируете исходный файл, результат будет иметь тип ElementTree . Но для выполнения различных операций вы должны запустить root = myElementTree.getroot() (на этот раз результат имеет тип Элемент ) и использовать только этот элемент root.

Например, если вы запускаете ElementTree.tostring(...), первый параметр должен быть просто root, а не myElementTree .

...