PythonL:将XML元素打印为XML文本

我的问题

我正在使用python 3.8本机xml库从FDA站点解析大型XML文件。由于文件很大,因此我使用iterparse函数,该函数一次读取一个元素,而不是将整个文件加载到内存中。我想打印Element的XML文本,但是找不到一种方法。

我尝试了什么

通常的犯罪嫌疑人-RTFM,print()dir()。但是,我只能迭代到子项中,而不能打印项目XML表示形式。

for xml_filename in xml_filenames:
    for evt,elem in iterparse(xml_filename):
        if elem.tag == 'safetyreport':
            print(f'elem:     {elem}')           # elem:     <Element 'safetyreport' at 0x7fd77dc3b590>
            print(f'items:    {elem.items()}')   # items:    []
            print(f'type:     {type(elem)}') .   # type:     <class 'xml.etree.ElementTree.Element'>
            print(elem.getchildren())            # [<Element 'safetyreportversion' at 0x7fd77dc3fb80>,...

我的问题

如何在Python 3.8中获得XML Element的文本XML表示?

chz_zc 回答:PythonL:将XML元素打印为XML文本

ElementTree 类中的 tostring() 函数生成包含所有子元素的 XML 元素的文本表示。

示例:

from xml.etree import ElementTree as ET

xml_filenames = [ ... ]

for xml_filename in xml_filenames:
    for evt,elem in ET.iterparse(xml_filename):
        if elem.tag == 'safetyreport':
            print(ET.tostring(elem,encoding='unicode')) # added line

样本输入:

<?xml version="1.0"?>
<collection>
  <safetyreport>
   <safetyreportversion>1</safetyreportversion>
   <safetyreportid>US-ABC-12345</safetyreportid>
  </safetyreport>
  <safetyreport>
   <safetyreportversion>1</safetyreportversion>
   <safetyreportid>US-XYZ-12346</safetyreportid>
  </safetyreport>  
</collection>

输出:

<safetyreport>
   <safetyreportversion>1</safetyreportversion>
   <safetyreportid>US-ABC-12345</safetyreportid>
  </safetyreport>

<safetyreport>
   <safetyreportversion>1</safetyreportversion>
   <safetyreportid>US-XYZ-12346</safetyreportid>
  </safetyreport>
本文链接:https://www.f2er.com/3134726.html

大家都在问