Прочитать файл XML построчно, внести изменения
mpd = ''
file1 = open("/manifest.mpd", "r", encoding = "utf-8")
while True:
line = file1.readline() # считываем строку
if not line: break # прерываем цикл, если строка пустая
if line.strip() == '</Period>':
mpd += f' <AdaptationSet id="1" mimeType="image/webp" contentType="image">\n'
mpd += ' </AdaptationSet>\n'
mpd += line
file1.write(mpd)
#print(mpd)
file1.close()
Все не то, необходимо прочитать файл mpd, найти вхождение , добавить пару строк передним и сохранить в этом же файле. Находим, добавляем, а сохранить не удается. Все режимы перепробовал, либо ошибка, либо пустой файл по итогу
Как это лучше всего сделать?
**************Пытаюсь разобраться как работать с xml.etree.ElementTree
tree = ET.parse('/manifest.mpd')
root = tree.getroot()
new_elem = ET.Element('new_tag')
new_elem.set('attribute_name', 'attribute_value')
new_elem.text = 'element_tesssssssxt'
root.findall('AdaptationSet').append(new_elem)
Не понимаю, читает, изменяет..
Допустим необходимо добавить строчку, добавить после последнего элемента AdaptationSet
Как это можно сделать, может ли добавлять строчки?
После сохранения, все теги начинаются с ns0:
root.find("{urn:mpeg:dash:schema:mpd:2011}AdaptationSet")
Не работает
Ответы (1 шт):
Автор решения: Alex Titov
→ Ссылка
Поставьте lxml, код примерно такой.
import lxml.etree as ET
tree = ET.parse('manifest.mpd')
root = tree.getroot()
new_elem = ET.Element('new_tag')
new_elem.set('attribute_name', 'attribute_value')
new_elem.text = 'element_tesssssssxt'
# '*/' - чтобы искать во всех дочерних элементах, а не только в текущем
# [-1] - чтобы добавить за последним элементом
# addnext - если надо добавить именно после (append добавит "внутрь")
root.findall('*/{urn:mpeg:dash:schema:mpd:2011}AdaptationSet')[-1].addnext(new_elem)
tree.write('manifest1.mpd', pretty_print=True, xml_declaration=True)