我有一个具有这种结构的xml文件:
<zone id=1 name=one>
<subzone>
<zone id=2 name=subone>
...
<item>
<item>
...
<zone id=1 name=two>
<subzone>
<zone id=2 name=subtwo>
...
<item>
<item>
...
我想获得所有项目的列表,其中包含有关其父母的信息。例如 - item, zone_id=1, zone_name=two, subzone_id=2, subzone_name=subtwo
。
zone
组的items
个节点数量不同。
我可以获得所有区域的列表:
def read_region(self, xml):
doc = minidom.parse(xml)
node = doc.getElementsByTagName("zone")
for zone in node:
print(zone.getAttribute("name"))
如果有很多节点具有相同的节点名,我如何从特定节点获取数据?或者是否可以获取有关元素的所有父节点的信息?
答案 0 :(得分:1)
你问两个问题:
如何获取给定元素的所有父元素?
要获取特定元素,您必须确定 与该元素不同的内容。它可以是与唯一可识别的另一个元素的关系。
您可以通过重复调用node.getparent()
来获取元素的所有父母,如下所示。见http://lxml.de/api/lxml.etree._Element-class.html。
def get_parents(element):
ancestors = []
parent = element.getparent()
while parent != None:
ancestors.append(parent)
parent = parent.getparent()
return ancestors
答案 1 :(得分:0)
我找到了答案:
def read_region(self, xml):
doc = minidom.parse(xml)
node = doc.getElementsByTagName("Zone")
data_array = []
for zone in node:
zone_child = zone.getElementsByTagName("Zone")
if len(zone_child)==0:
print(zone.getAttribute("name"))
subzone_parent = zone.parentNode
zone_parent = subzone_parent.parentNode
print(zone_parent.getAttribute("name"))
subzone_parent_parent = zone_parent.parentNode
zone_parent_parent = subzone_parent_parent.parentNode
print(zone_parent_parent.getAttribute("name"))
subzone_top = zone_parent_parent.parentNode
zone_top = subzone_top.parentNode
try:
print(zone_top.getAttribute("name"))
except Exception,e:
print("DEBUG")
我检查Zone节点中没有子节点并获取该节点的每个父节点。