У меня огромный XML-файл (1 гига). Я хочу переместить некоторые элементы (записи) в другой файл с таким же заголовком и спецификациями.
Допустим, исходный файл содержит эту запись с тегом <to_move>
:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE some SYSTEM "some.dtd">
<some>
...
<to_move date="somedate">
<child>some text</child>
...
...
</to_move>
...
</some>
Я использую lxml.etree.iterparse для перебора файла. Работает отлично. Когда я нахожу элемент с тегом <to_move>
, давайте предположим, что он хранится в переменной element
I do
new_file.write(etree.tostring(element))
Но это приводит к
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE some SYSTEM "some.dtd">
<some>
...
<to_move xmlns:="some" date="somedate"> # <---- Here is the problem. I don't want the namespace.
<child>some text</child>
...
...
</to_move>
...
</some>
Итак, вопрос в том, как заставить etree.tostring () не писать xmlns:="some"
. Это возможно? Я боролся с api-документацией lxml.etree, но не смог найти удовлетворительного ответа.
Это то, что я нашел для etree.trostring
:
tostring(element_or_tree, encoding=None, method="xml",
xml_declaration=None, pretty_print=False, with_tail=True,
standalone=None, doctype=None, exclusive=False, with_comments=True)
Сериализация элемента в закодированное строковое представление его XML
дерево.
Мне кажется, что каждый из параметров tostring()
не помогает. Любое предложение или исправления?