我将一个大的XML拆分成小的分支,然后只解析这部分。我搜索修改的时间戳"mod_time"标签,它在"contacts"标签中可用,但我的对象函数调用找不到值。在一些contacts中,也有一些标签完全丢失。
我尝试了iterfind('tag_name')
、iter()
、findall('tag_name')
,但我的程序没有显示任何结果,我几个小时都找不到故障在哪里。
下面是我的XML,它简化为两个元素:
<?xml version="1.0" encoding = "utf-8"?>
<phonebooks>
<phonebook name="Telefonbuch">
<contact>
<category>0</category>
<person>
<realName>Dummy, Name, Street</realName>
</person>
<telephony nid="1">
<number type="work" prio="1" id="0">012345678</number>
</telephony>
<services />
<setup />
<features doorphone="0" />
<mod_time>1587477163</mod_time>
<uniqueid>358</uniqueid>
</contact>
<contact>
<category>0</category>
<person>
<realName>Foto Name</realName>
</person>
<telephony nid="1">
<number type="home" prio="1" id="0">067856743</number>
</telephony>
<services />
<setup />
<features doorphone="0" />
<mod_time>1547749691</mod_time>
<uniqueid>68</uniqueid>
</contact>
</phonebook>
</phonebooks>
她知道我做了什么
import timeit
import xml.etree.ElementTree as ET
class Phonebook:
def __init__(self, xml_file, tag_node):
"""Split tree in contact branches """
self.xml_file = xml_file
self.tag_node = tag_node
# For furter parsing
contacts = []
i = 0
events =('start','end','start-ns','end-ns')
for event, elem in ET.iterparse(self.xml_file, events=events):
if event == 'end' and elem.tag == self.tag_node[0]:
#print(elem.tag)
contacts.append(elem)
par = Contact(elem, i)
par.parse_node(elem, i)
i += 1
elem.clear()
print("Amount of contacts:", len(contacts))
class Contact:
def __init__(self, branch, i):
self.tree = branch
#print(i, self.tree)
def parse_node(self, branch, i):
for node in branch.iterfind('.//mod_time'):
print(node.text)
def main():
elem = Phonebook('new _dummy1.xml',['contact'])
if __name__ == '__main__':
""" Input XML file definition """
starttime=timeit.default_timer()
main()
print('Finished')
print("Runtime:", timeit.default_timer()-starttime)
输出:Amount of contacts: 2 Finished Runtime: 0.0006361000050674193
预期产出:
小行星1587477
2条答案
按热度按时间ibps3vxo1#
代码
产出
waxmsbnn2#
我现在解决了对象数据握手的问题。我现在创建了一个Contact的示例,它继承了父类Phonbook的值,而不是从Phonbook对象调用Contact。
函数,它引用了这个很棒的page。我发布我的解决方案,因为它可能会对其他遇到类似问题的人感兴趣。感谢所有试图提供帮助的人!
我更改的代码: