2013-02-11 61 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> 
相关问题