3 回答
TA贡献1798条经验 获得超3个赞
没有直接支持parent属性的形式,但是您可以使用此处描述的模式来实现所需的效果。建议使用以下一类代码(从链接到文章)为整个树创建子对象到父对象的映射:
parent_map = dict((c, p) for p in tree.getiterator() for c in p)
TA贡献1829条经验 获得超9个赞
Vinay的答案应该仍然有效,但是对于Python 2.7+和3.2+,建议以下操作:
parent_map = {c:p for p in tree.iter() for c in p}
getiterator()不推荐使用iter(),而推荐使用新的dict列表理解构造函数。
其次,在构造XML文档时,一个孩子可能会有多个父母,尽管一旦您序列化该文档,该父母就会被删除。如果那很重要,您可以尝试以下方法:
parent_map = {}
for p in tree.iter():
for c in p:
if c in parent_map:
parent_map[c].append(p)
# Or raise, if you don't want to allow this.
else:
parent_map[c] = [p]
# Or parent_map[c] = p if you don't want to allow this
TA贡献1735条经验 获得超5个赞
您可以...在ElementTree中使用xpath 表示法。
<parent>
<child id="123">data1</child>
</parent>
xml.findall('.//child[@id="123"]...')
>> [<Element 'parent'>]
添加回答
举报