我现在已经使用了ElementTree一段时间了,而且我正在尝试一些没有太大成功的东西。我得到了这个树之王的XML文件:
<root>
<page>
<revision>
<username>Name</>
<ID>124</>
<Adress_ip></>
<revision>
<username></>
<ID>125</>
<Adress_ip>192.168.0.1</>
我想要做的就是将用户名和Adress_ip放在同一个元素中。更确切地说,我正在尝试,当用户名为空时,用Adress_IP中的文本填充它。总有一个在其他值上,而不是在同一个元素中同时存在。
到目前为止,我正在尝试使用这样的代码。问题?这个脚本不想这样做,如果句子,所以lefting lefting空白所有元素没有用户名。当然,这不是我所希望的。
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 :(得分:0)
这个脚本不想这样做,如果句子,那么在没有用户名的情况下删除所有元素。
这一点,
vide = username.text.find("")
if username.text == vide:
...
不起作用;它不会测试username
是否为空。只需使用
if username.text == None:
...
我想要做的就是将用户名和Adress_ip放在同一个元素中。更确切地说,我正在尝试,当用户名为空时,用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>