Python добавить новый элемент с помощью xml ElementTree - PullRequest
1 голос
/ 08 мая 2020

XML файл

<?xml version="1.0" encoding="utf-8"?>
<Info xmlns="BuildTest">
<RequestDate>5/4/2020 12:27:46 AM</RequestDate>
</Info>

Я хочу добавить новый элемент в тег Info.

Вот что я сделал.

import xml.etree.ElementTree as ET

tree = ET.parse('example.xml')
root = tree.getroot()
ele = ET.Element('element1')
ele.text = 'ele1'
root.append(ele)
tree.write("output.xhtml")

Вывод

<ns0:Info xmlns:ns0="BuildTest">
<ns0:RequestDate>5/4/2020 12:27:46 AM</ns0:RequestDate>
<element1>ele1</element1></ns0:Info>

Три вопроса:

  1. Отсутствует <?xml version="1.0" encoding="utf-8"?>.
  2. Неверное пространство имен.
  3. whitespace нового элемента больше нет.

Я видел много вопросов, связанных с этим c, большинство из них предлагает другие пакеты. Есть ли способ, которым он может справиться правильно?

1 Ответ

1 голос
/ 08 мая 2020

Инструкции по обработке не считаются элементами XML. Просто Google является частью инструкций обработки XML, и первый результат гласит:

инструкции обработки являются разметкой, но не элементами .

Поскольку используемый вами пакет буквально называется ElementTree, вы можете с полным основанием ожидать, что его объекты будут деревьями элементов. Если я правильно помню, DOM-совместимые пакеты XML могут поддерживать неэлементную разметку в XML.

Для проблемы пространства имен ответ находится в переполнении стека, в Удалить ns0 из XML - вам просто нужно зарегистрировать пространство имен, которое вы указали в верхнем элементе вашего документа. У меня сработало следующее:

ET.register_namespace("", "Buildtest")

Что касается пробелов - новый элемент не имеет пробелов. Вы можете назначить члену tail добавление перевода строки после элемента.

...