我正在尝试使用 Python 使用 cElementTree 和 iterparse 解析大型 XML 文件(27GB)。我能够提取所有标签,但由于某种原因,没有检索到任何元素文本(它总是显示“无”)。我检查了文档和 StackOverflow 但无济于事。作为最后的手段,我尝试使用 lxml 进行解析并且它可以工作,但如果可能的话,我更愿意在 cElementree 上解决它。更新:当我注释掉 elem.clear() 行时,它显示正在解析的数据,但现在我试图弄清楚为什么 clear() 方法在数据打印之前擦除数据(最终我想把数据到一个单独的数据结构,如数据库)。我假设我需要清除数据,以便在文件解析期间不会最大化内存。这是其中之一吗?
使用从文件中提取的较小样本,我仍然遇到相同的错误。XML 文件看起来像这样(尽管有更多条目):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><entityList><entity
xmlns:ns2="urn:hl7-org:v3" xmlns:ns3="urn:axolotl-com:pdo">
<fragmentId>d68e616e-a6bc-4630-b104-3891859a8ce4</fragmentId>
<aggregateId>H1060734453</aggregateId>
<source>b6167864-5f74-40e5-97c5-7e551a3a4a7d</source>
<sourceName>SHM ADT</sourceName>
<sourceOid>2.16.840.1.113883.3.2.2.3.1.21.3</sourceOid>
<sourceAaoid>2.16.840.1.113883.3.62.2</sourceAaoid>
</entity></entityList>
这是行为不端的代码片段:
import xml.etree.ElementTree as etree
xml=r'C:\sample.xml'
count = 0
for event, elem in etree.iterparse(xml):
if event == 'end':
if elem.tag == 'entity':
count+=1
for child in elem:
print (child.tag, child.attrib, child.text)
elem.clear()
print(count)
我越来越
fragmentId {} None
aggregateId {} None
source {} None
sourceName {} None
sourceOid {} None
sourceAaoid {} None
为什么 elem.clear() 会擦除文本,即使看起来应该首先打印?有什么建议么?