2008-12-17 77 views
8

为XML如何使用cElementTree检索父节点?

<grandparent> 
    <parent1> 
    <child>data1</child> 
    </parent1> 
    <parent2> 
    <child>data2</child> 
    </parent2> 
</grandparent> 

我需要含有母体的元组,数据以XML每个父列表。

有没有办法做到这一点使用cElementTree?我能够为孩子,数据做到这一点,但不幸的是,孩子在所有的价值观上都是一样的,因此它的用处不大。

回答

4

似乎你可以通过使用xpath命令(如child.find('../parent')),使用ElementTree的版本1.3(检查http://effbot.org/zone/element-xpath.htm)从子项访问父项。但我认为Python带有版本1.2或其他东西。

您也应该检查LXML这与etree兼容,并具有完整的XPath支持http://lxml.de/

+0

该文档说了类似于`在2.7版本中更改:ElementTree API更新为1.3.`在http:// docs .python.org/2/library/xml.etree.elementtree我使用的是2.7,但对我来说``../ myparent''似乎仍然不起作用;这是什么意思? – n611x007 2013-01-10 22:45:13

+0

是的,我不认为这是cElementTree的支持。例如:ET.fromstring(“”).find('.// b')。find('..')返回None – 2014-10-09 10:27:54

5
parent_map = dict((c, p) for p in tree.getiterator() for c in p) 
parent_map[el].remove(el) 
0

这句法似乎对cElementTree

ET.fromstring("<c><a><b></b></a></c>").find('.//b/..') 

没有去基地父,并用工作双斜杠然后在路径中单斜杠。
(将作为注释发布到上面的主题,但它似乎我没有特权)