XML в XML в Python

XML-файл содержит множество данных, включая некоторые счета-фактуры. Я хотел бы извлечь только счета-фактуры из XML-файла и создать новый XML-файл, содержащий только счета-фактуры.

Я написал код, который извлекает счета-фактуры, но когда дело доходит до создания нового xml-файла (со счетами-фактурами), он содержит только один счет-фактуру. Как я могу изменить свой код, чтобы создать XML-файл со всеми счетами-фактурами.

Пожалуйста, помогите мне решить эту проблему.

Мой код: (бизонилат означает счет)

import os
import xml.etree.ElementTree as ET

utvonal = os.path.dirname(os.path.realpath(__file__))
xml_file = os.path.join(utvonal, 'xml\\01-K011116_K011169.xml') 
doc = ET.parse(xml_file).getroot()

for invoice in doc.findall('bizonylat'):
    invoices = ET.ElementTree(invoice).write('out.xml', 'utf8')

Схема XML:

<konyveles>
  <program>Kont&#xED;r FB </program>
  <verzio>1.12.2.8</verzio>
  <feladdatum>2014.01.26</feladdatum>
  <feladido>17:05:38</feladido>
  <cegnev>C&#xE9;g neve</cegnev>
  <felhasznalo>Tulajdonos</felhasznalo>
  <bizonylat>
    <bizonylatszam>V3</bizonylatszam>
    <biz_egyedi_id/>
    <konyv_dat>2013.01.24</konyv_dat>
    <teljesites_dat>2013.02.11</teljesites_dat>
    <esedekesseg_dat>2013.03.20</esedekesseg_dat>
    <partneradat/>
    <bizonylat_netto>628937,00</bizonylat_netto>
    <bizonylat_brutto>798750,00</bizonylat_brutto>
    <kontirozasok></kontirozasok>
  </bizonylat>
  <bizonylat>
    <bizonylatszam>V3</bizonylatszam>
    <biz_egyedi_id/>
    <konyv_dat>2013.01.24</konyv_dat>
    <teljesites_dat>2013.02.11</teljesites_dat>
    <esedekesseg_dat>2013.03.20</esedekesseg_dat>
    <partneradat/>
    <bizonylat_netto>628937,00</bizonylat_netto>
    <bizonylat_brutto>798750,00</bizonylat_brutto>
    <kontirozasok></kontirozasok>
  </bizonylat>
</konyveles>

Посмотрите, как использовать петлю. Ваш цикл создает один и тот же файл для одного счета снова и снова.

Jongware 20.07.2018 22:25

Простой запуск XSLT демонстрационная рабочий пример. Модуль lxml Python может запускать сценарии XSLT.

Parfait 20.07.2018 23:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вам нужен хорошо отформатированный XML, вам понадобится корневой элемент в вашем документе, затем вы можете добавить все свои элементы в корень и сохранить в свой файл.

root = ET.Element('root')
root.extend(doc.findall('bizonylat'))
ET.ElementTree(root).write('out.xml', 'utf8')

Спасибо, Эльвио Мартинелли! : D

3r1c 21.07.2018 11:53

Другие вопросы по теме