将XML标签插入另一个标签中



我正在尝试通过python中的一个XML文件与ElementTree迭代,在标签中更改一个属性,然后将该标签插入另一个文件中的另一个标签中,代码下面:

import xml.etree.ElementTree as ET
tree = ET.parse('original_file.xml')
root = tree.getroot()
cnt = 1

exact = ET.Element("eExact")
glentries = ET.SubElement(exact, "GLEntries")
glentry = ET.SubElement(glentries, "GLEntry", status="E", entry="194100751")
ET.SubElement(glentry, "DocumentDate").text = "31032019"
ET.SubElement(glentry, "Description").text = "TEST"
ET.SubElement(glentry, "Journal", code="41", type="M")
for child in root.iter('FinEntryLine'):
    child.attrib["number"] = cnt
    ET.SubElement(glentry, child)
    cnt += 1
tree = ET.ElementTree(exact)
tree.write("output_file.xml")

但是,这是行不通的,因为Elemnttree和子元素报告说它们不能串行。还有另一种方法,但是我不必迭代"孩子"的所有子标签?

输入文件:

<eExact>
   <GLEntries>
     <GLEntry status="E" entry="194100751">
       <DocumentDate>31032019</DocumentDate>
       <Description>TEST</Description>
       <Journal code="41" type="M"></Journal>
  <FinEntryLine number="83932" type="N" subtype="N">
    <Description>01032019 GWPC 1900005105</Description>
  </FinEntryLine>
  <FinEntryLine number="98457" type="N" subtype="N">
    <Description>01032019 GWPC 1900005105</Description>
  </FinEntryLine>
  </GLEntry>
  </GLEntries>
</eExact>

输出应将数字标签更改为序列,从1。

开始

如果您只想更改<FinEntryLine>元素的number属性,则需要:

import xml.etree.ElementTree as ET
tree = ET.parse('original_file.xml')
cnt = 1
for child in tree.iter('FinEntryLine'):
    child.attrib["number"] = str(cnt)
    cnt += 1
tree.write("output_file.xml")

结果(output_file.xml):

<eExact>
   <GLEntries>
     <GLEntry entry="194100751" status="E">
       <DocumentDate>31032019</DocumentDate>
       <Description>TEST</Description>
       <Journal code="41" type="M" />
  <FinEntryLine number="1" subtype="N" type="N">
    <Description>01032019 GWPC 1900005105</Description>
  </FinEntryLine>
  <FinEntryLine number="2" subtype="N" type="N">
    <Description>01032019 GWPC 1900005105</Description>
  </FinEntryLine>
  </GLEntry>
  </GLEntries>
</eExact>

最新更新