python - Python 中的 XML 到 XML
问题描述
xml 文件包含许多数据,包括一些发票。我想只从 xml 文件中提取发票并创建一个只包含发票的新 xml 文件。
我编写了一个提取发票的代码,但是在创建一个新的 xml 文件(带有发票)时,它只包含一个发票。如何修改我的代码以创建包含所有发票的 xml 文件。
请帮我解决这个问题。
我的代码:(bizonylat 表示发票)
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ír FB </program>
<verzio>1.12.2.8</verzio>
<feladdatum>2014.01.26</feladdatum>
<feladido>17:05:38</feladido>
<cegnev>Cé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>
解决方案
如果您想要格式良好的 XML,您需要在文档中添加一个根元素,然后您可以将所有元素添加到根并保存到文件中。
root = ET.Element('root')
root.extend(doc.findall('bizonylat'))
ET.ElementTree(root).write('out.xml', 'utf8')
推荐阅读
- string - 如何在 Go 中的多行字符串中添加反引号?
- artifactory - 当 jfrog-cli 在下载时跳过已经存在的文件或工件时,如何以编程方式知道?
- python - 如何从 Excel 工作表中删除无效字符?
- laravel - 如何在我的项目上设置惯性,当我尝试加载登录页面时出现错误
- c# - 我无法从 NHibernate 的列表中删除项目
- html - 无法在 div 中设置图像
- asp.net-core - ASP.NET Core 中的静态文件在本地工作,但一次不会发布到 Azure
- c# - 基元、泛型和重载——接口方法返回类型是否可以定义为一组结构和基元?
- python - 如何在字符串旁边打印变量的值,该变量的值是整数?
- transactions - Hazelcast 交易的保证是什么?