Я немного смущен некоторыми дизайнерскими решениями в API Python ElementTree - они кажутся произвольными, поэтому я хотел бы получить некоторые разъяснения, чтобы увидеть, имеют ли эти решения некоторую логику их, или если они просто более или менее ad hoc.Python ElementTree: ElementTree vs root Element
Итак, как правило, существует два способа генерации ElementTree
- один из потоков источника, например, файла или другого потока ввода-вывода. Это достигается с помощью функции parse()
или метода класса ElementTree.parse()
.
Другой способ - загрузить XML непосредственно из строкового объекта. Это можно сделать с помощью функции fromstring()
.
Хорошо, отлично. Теперь я бы подумал, что эти функции будут в основном идентичны с точки зрения того, что они возвращают, - разница между ними в основном является источником ввода (один берет файл или объект потока, а другой принимает простую строку). За исключением по какой-то причине функция parse()
возвращает объект ElementTree
, но функция fromstring()
возвращает объект Element
. Разница в основном состоит в том, что объект Element
является элементом корень элемента дерева XML, тогда как объект ElementTree
является своего рода «оберткой» вокруг корневого элемента, который предоставляет некоторые дополнительные функции. Вы всегда можете получить корневой элемент из объекта ElementTree
, вызвав getroot()
.
Тем не менее, я смущен, почему мы имеем это различие. Почему fromstring()
возвращает корневой элемент напрямую, но parse()
возвращает объект ElementTree
? Есть ли какая-то логика этого различия?
Честно говоря, 'ElementTree' API имеет некоторые действительно странные решения в разы, и Это одна из них. – gsnedders
Я работаю с lxml и api - это то же самое. Я тоже хотел бы узнать ответ на эти вопросы. Я стараюсь держать вещи на уровне обертки, но я не знаю, почему. –
ElementTree имеет больше возможностей, чем элемент, в частности 'write()'.Я не говорю, что они не могут быть предоставлены для Element, но они являются основными различиями. 'fromstring()' дает вам только элемент, который эффективно мешает вам изменять и писать дерево. – remram