将元素的文本内容复制到空同级元素

2024-06-02 19:33:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用ElementTree已经有一段时间了,有些东西我尝试了,但没有成功。我得到了一个XML文件,其中有一个树之王:

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

我要做的是把用户名和地址放在同一个元素中。更准确地说,当用户名为空时,我试图用address\u IP中的文本填充它。总是有一个对另一个值,而不是在同一个元素中同时存在这两个值。你知道吗

到目前为止,我正在尝试一些类似这样的代码。有什么问题吗?这个脚本不想做它的if语句,因此留空所有没有用户名的元素。当然,这不是我所希望的。你知道吗

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)

Tags: textinipid元素forifusername
1条回答
网友
1楼 · 发布于 2024-06-02 19:33:23

This script don't want to do it's if sentence, therfore lefting blank all elements without username.

这一点

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

不起作用;它不测试username是否为空。只是使用

if username.text == None:
    ...

What i'm trying to do it's to put both username and Adress_ip in the same element. More precisely, i'm trying to, whene username is empty, fill it with the text found in Adress_IP. There's always one on other value, never both at the same time in the same element.

输入XML(修订.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>

相关问题 更多 >