2013-02-11 71 views
0

我使用ElementTree的一段時間現在有我想要沒有多少成功的東西。我得到這個王樹的XML文件:複製文本內容爲空同級元素

<root> 
    <page> 
     <revision> 
      <username>Name</> 
      <ID>124</> 
      <Adress_ip></> 
     <revision> 
      <username></> 
      <ID>125</> 
      <Adress_ip>192.168.0.1</> 

我想要做的是把兩者的用戶名和Adress_ip在相同的元素。更確切地說,我想,whene用戶名是空的,在Adress_IP找到的文本填充它。總是有一個關於其他的價值,在同一個元素中永遠不會同時存在。

到目前爲止,我與一些代碼看起來像這樣嘗試。問題?這個腳本不想這樣做,如果句子,所以沒有用戶名空白所有元素。當然,這不是我所希望的。

for contributor in tree.iter("revision"): 
    for username in contributor.findall('username'): 
     vide = username.text.find("") 
     if username.text == vide: 
      for userip in contributor.findall('ip'): 
       revision.set('username', userip.text) 
     else:   
      revision.set('username', username.text) 

回答

0

這個腳本並不想這樣做的if語句,therfore lefting空白沒有用戶名的所有元素。

該位,

vide = username.text.find("") 
if username.text == vide: 
    ... 

不工作;它不檢查username是否爲空。只需使用

if username.text == None: 
    ... 

我想要做的是把兩者的用戶名和Adress_ip在相同的元素。更確切地說,我想,whene用戶名是空的,在Adress_IP找到的文本填充它。總是有一個關於其他的價值,在同一個元素中永遠不會同時存在。

輸入XML(revisions.xml):

<root> 
    <page> 
    <revision> 
     <username>Name</username> 
     <ID>124</ID> 
     <Adress_ip></Adress_ip> 
    </revision>  
    <revision> 
     <username></username> 
     <ID>125</ID> 
     <Adress_ip>192.168.0.1</Adress_ip> 
    </revision>  
    </page> 
</root> 

Python程序:

from xml.etree import ElementTree as ET 

tree = ET.parse("revisions.xml") 

for revision in tree.iter("revision"): 
    username = revision.find('username') 
    Adress_ip = revision.find('Adress_ip') 
    if username.text == None:   
     username.text = Adress_ip.text 

print ET.tostring(tree.getroot()) 

輸出:

<root> 
    <page> 
    <revision> 
     <username>Name</username> 
     <ID>124</ID> 
     <Adress_ip /> 
    </revision>  
    <revision> 
     <username>192.168.0.1</username> 
     <ID>125</ID> 
     <Adress_ip>192.168.0.1</Adress_ip> 
    </revision>  
    </page> 
</root>