首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的Python代码两次向XML文件插入一个Subelement?

为什么我的Python代码两次向XML文件插入一个Subelement?
EN

Stack Overflow用户
提问于 2019-02-22 17:30:32
回答 1查看 88关注 0票数 1

我编写了一个python代码,它将包含内容的子元素插入到另一个更大的子元素中。它确实有效,但问题是,由于某种原因,每个子元素都插入了两次。我检查了代码,我不知道为什么会发生,有人能指出我的代码中的问题吗?我知道这不是最有效的方法,但我会尽快改进的。

代码:

代码语言:javascript
复制
import random
import os
import xml.etree.ElementTree as ET
map_file = "D:\\Users\\micha\\Desktop\\ram-and-michael\\binaries\\data\\mods\\public\\maps\\scenarios\\TestML.xml"
units_file = os.listdir("D:\\Users\\micha\\Desktop\\ram-and-michael\\binaries\\data\\mods\\public\\simulation\\templates\\units") # all the units in the file. 
armies_types = ("athen", "brit", "cart", "gaul", "iber", "kush", "mace", "maur", "pers", "ptol", "rome", "sele", "spart")
map_tree = ET.parse(map_file)
army_list = [] # units that can spawn in a game
    army1 = generate_units() # returns a list of strings
    army2 = generate_units()
    flag = 10 # id 

    map_root = map_tree.getroot()
    Entites = map_tree.find("Entities")
    Entites = delete_Entitites(Entites)


    for unit in army1:
        Entity = ET.SubElement(Entites,"Entity", uid= str(flag))
        Template = ET.SubElement(Entity,"Template").text = "units/" + unit
        Player = ET.SubElement(Entity,"Player").text = "1" 
        Position = ET.SubElement(Entity,"Position",x="326.66935" ,z="321.1384")
        Orientation = ET.SubElement(Entity,"Orientation",y="2.35621")
        flag += 1
        Entites.append(Entity)
        print(flag)
    for unit in army2:

        Entity = ET.SubElement(Entites,"Entity", uid= str(flag))
        Template = ET.SubElement(Entity,"Template").text = "units/" + unit
        Player = ET.SubElement(Entity,"Player").text = "2"
        Position = ET.SubElement(Entity,"Position",x="326.66935" ,z="321.1384")
        Orientation = ET.SubElement(Entity,"Orientation",y="2.35621")
        flag += 1 
        Entites.append(Entity)
        print(flag)
    indent(map_root)

    map_tree.write(map_file,encoding = "utf-8",xml_declaration = True)

输出:

代码语言:javascript
复制
<Entities>
        <Entity uid="10">
          <Template>units/gaul_hero_vercingetorix_infantry</Template>
          <Player>1</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="10">
          <Template>units/gaul_hero_vercingetorix_infantry</Template>
          <Player>1</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="11">
          <Template>units/gaul_catafalque</Template>
          <Player>1</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="11">
          <Template>units/gaul_catafalque</Template>
          <Player>1</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="12">
          <Template>units/gaul_infantry_javelinist_e</Template>
          <Player>1</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="12">
          <Template>units/gaul_infantry_javelinist_e</Template>
          <Player>1</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="13">
          <Template>units/gaul_hero_vercingetorix</Template>
          <Player>1</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="13">
          <Template>units/gaul_hero_vercingetorix</Template>
          <Player>1</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="14">
          <Template>units/gaul_cavalry_swordsman_a</Template>
          <Player>1</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="14">
          <Template>units/gaul_cavalry_swordsman_a</Template>
          <Player>1</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="15">
          <Template>units/gaul_hero_vercingetorix_infantry</Template>
          <Player>1</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="15">
          <Template>units/gaul_hero_vercingetorix_infantry</Template>
          <Player>1</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="16">
          <Template>units/rome_infantry_swordsman_a</Template>
          <Player>2</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="16">
          <Template>units/rome_infantry_swordsman_a</Template>
          <Player>2</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="17">
          <Template>units/rome_catafalque</Template>
          <Player>2</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="17">
          <Template>units/rome_catafalque</Template>
          <Player>2</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
        <Entity uid="18">
          <Template>units/rome_champion_infantry_barracks</Template>
          <Player>2</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
      <Entity uid="18">
          <Template>units/rome_champion_infantry_barracks</Template>
          <Player>2</Player>
          <Position x="326.66935" z="321.1384" />
          <Orientation y="2.35621" />
        </Entity>
      </Entities>

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-23 01:34:57

创建SubElement时指定父元素,因此它已经添加到父元素中。

在创建SubElement之后,您将再次将其附加到父程序中:

代码语言:javascript
复制
Entites.append(Entity)

所以你的SubElement会重复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54832301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档