[英]Control search depth findall Lxml
我是Python的初学者,并尝试使用python中的LXML解析XML。 我正在尝试使用finall()搜索标签,但希望控制深度,在这里我可以搜索标签,但搜索范围不超过一个层次。 解释如下:
<?xml version='1.0' encoding='utf-8'?>
<system xmlns="some_name_space">
<a>
<host>Random Name</host>
<class>
<name>Main_Tag_1</name>
<detail>
<name>Child_Tag_1</name>
<ip>ip_1</ip>
<port>port_1</port>
<detail>
</class>
<class>
<name>Main_Tag_2</name>
<detail>
<name>Child_Tag_2</name>
<ip>ip_2</ip>
<port>port_2</port>
<detail>
</class>
<class>
<name>Main_Tag_3</name>
<detail>
<name>Child_Tag_3</name>
<ip>ip_3</ip>
<port>port_3</port>
<detail>
</class>
</a>
我使用下面的Python找到所有Main_tags共享相同的标签名称为名称 。 我还没有在这里添加完整的程序。 但是此函数是类的一部分。
def name_ip_dict(self,filename):
self.tag_replace = {}
context = ET.iterparse(filename, tag='{some_name_space}class')
for action,elem in context:
name_tag = elem.findall(".//{some_name_space}name")
for name in name_tag:
print name.text
for node in elem:
ip_list = node.findall(".//{some_name_space}ip")
for ip in ip_node_list:
self.tag_replace.setdefault(name.text, []).append(ip.text)
现在,我得到的输出为
{'Main_Tag_1': ['ip_1'], 'Child_tag_1': ['ip_1'], 'Main_Tag_2': ['ip_2'], 'Child_tag_1': ['ip_2']} and so on..
但是我只想获取First Parent,即Main_Tag1,2或3,以及ip标签中的文本。
{'Main_Tag_1': ['ip_1'], 'Main_Tag_2': ['ip_2']} and so on..
这使我感到有必要控制findall的深度,但是我无法找到与Web深度有关的任何内容。
请让我知道是否已经存在此类用例,以及实现此用例的最佳方法是什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.