Как создать виртуальный корень с ElementTree Python?

Я пытаюсь использовать ElementTree Python для создания файла XHTML.

Однако ElementTree.Element() просто позволяет мне создать один тег (например, HTML). Мне нужно создать какой-то виртуальный корень или как бы он ни назывался, чтобы я мог помещать различные файлы , DOCTYPES и т. д.

Как мне это сделать? Спасибо


person Uri    schedule 01.07.2009    source источник


Ответы (2)


Я не знаю, есть ли лучший способ, но я видел, как это делается:

Создайте базовый документ в виде строки:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html></html>

Затем проанализируйте эту строку, чтобы начать новый документ.

person Gareth Simpson    schedule 01.07.2009
comment
+1, подтверждено, elementtree не может добавлять/создавать тип документа (но может его анализировать!), так что это решение максимально чистое. - person Alex Martelli; 01.07.2009
comment
Похоже, это больше не работает: import xml.etree.ElementTree as ET; string = '''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n<html></html>''';print(ET.tostring(ET.fromstring(string), encoding='unicode')) излучает только <html /> - person Matteo Gamboz; 07.12.2020

У меня была такая же проблема. При анализе документа и повторной записи документа определение типа документа больше не присутствует. Я нашел решение, просматривая документацию:

текст ссылки

Сохранение файлов HTML #

Чтобы сохранить обычный файл HTML, просто напишите дерево.

tree.write("outfile.htm")

Это работает хорошо, если файл не содержит встроенных тегов SCRIPT или STYLE.

Если вы хотите, вы можете добавить ссылку на DTD в начало файла:

file = open("outfile.htm", "wb")
file.write(DTD + "\n")
tree.write(file)
file.close()
person Stephan    schedule 01.02.2010
comment
При использовании Python 3.6 это не работает «из коробки», но может быть легко исправлено. Нужно открыть файл с "wb" вместо "w" и использовать .encode() в строке префикса, поскольку file.write ожидает двоичный параметр с "wb". - person Zoltan; 15.01.2021