0

私は 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 で見つかったテキストを入力しようとしています。同じ要素で同時に両方が存在することはありません。

これまでのところ、私はこのようなコードを試していました。問題?このスクリプトは 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)
4

1 に答える 1

0

このスクリプトは if 文を実行したくないため、ユーザー名のないすべての要素を空白のままにします。

このビット、

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>
于 2013-02-13T19:58:19.307 に答える