2011-11-17 73 views
1

我正在尋找一個Python的lxml.etree配方,將扭轉元素的嵌套,打開嵌套:逆轉與蟒蛇lxml.etree元素

<text> 
    <name> 
     <ref>foobar</ref> 
    </name> 
</text> 

到:

<text> 
    <ref> 
     <name>foobar</name> 
    </ref> 
</text> 

我有一種感覺,這是顯而易見的,但我沒有看到它。

+0

它不應該是' foobar的'? – jfs

+0

不,我想在中搜索'的所有實例'並將它們的嵌套方向如上 – jjon

回答

2

像這樣的東西?

import lxml.etree as et 
from lxml.builder import E 

xml = """ 
<text> 
    <name> 
     <ref>foobar</ref> 
    </name> 
</text> 
""" 

tree = et.fromstring(xml) 

for name in tree.findall('name'): 
    text = name.find('ref').text 
    tree.replace(name, E.ref(E.name(text))) 

print et.tostring(tree) 
+0

爲什麼是。非常類似的東西。 'tree.find('text')'返回無,但改爲'text = tree.getroottree()',它可以工作。我希望在etree中可能有一個捷徑,但這工作正常。謝謝@Acorn – jjon

+0

糟糕,固定。我忘記了當你解析一個XML文檔時,你開始在根節點的上下文中。 – Acorn

+0

已更新爲使用電子工廠的更緊湊解決方案。 – Acorn