Почему LXML Write плохо печатает в новый файл? - PullRequest
0 голосов
/ 31 января 2019

Я хочу загрузить шаблон XML из одного файла, изменить его и сохранить результаты в новом файле с форматированием.Однако красивая печать не добавляет желаемого форматирования.Другие решения в стеке - это когда дерево записывается обратно в тот же файл, но не в новый.Например:

from lxml import etree as ET 

parser = ET.XMLParser(remove_blank_text=True) 
tree = ET.parse("template.xml", parser) 
root = tree.getroot() 
A = ET.SubElement(root, "A") 
ET.SubElement(A, "a") 
B = ET.SubElement(root, "B") 
ET.SubElement(B, "b") 
tree.write("output.xml", pretty_print=True)

template.xml

<document>
</document>

output.xml записывается без форматирования

<document>
<A><a/></A><B><b/></B></document>

1 Ответ

0 голосов
/ 31 января 2019

Отредактируйте текст внутри template.xml, чтобы он был таким:

<document></document>

И снова запустите свой код, вы получите это:

<document>
  <A>
    <a/>
  </A>
  <B>
    <b/>
  </B>
</document>

Но важный вопрос - ПОЧЕМУ?!

Ответ можно найти в формальной документации , в которой говорится:

Хорошая печать (или форматирование) документа XML означает добавление пробела ксодержимое.Эти изменения безвредны, если они влияют только на элементы в документе, которые не несут (текстовые) данные.Они повреждают ваши данные, если они воздействуют на элементы, которые содержат данные. Если lxml не сможет различить пробелы и данные, это не изменит ваши данные.Поэтому пробелы добавляются только между узлами, которые не содержат данных. Это всегда имеет место для деревьев, построенных поэлементно.

...