使用ElementTree将新的SubElement添加到现有XML文件中

桑杰

我有两个文件夹,其中一个文件夹包含数千个图像,另一个文件夹具有相应的.xml文件。XML文件和图像名称相同(即2007.xml和2007.jpg)。现在,我想将图像名称(2007.jpg)添加到其相应的文件(2007.xml)中。.xml文件格式为:

<?xml version='1.0' encoding='ASCII'?>
<annotation>
  <size>
    <width>1820</width>
    <height>940</height>
  </size>
  <object>
    <name>Car</name>
    <bndbox>
      <xmin>74.0</xmin>
      <ymin>509.0</ymin>
      <xmax>236.0</xmax>
      <ymax>609.0</ymax>
    </bndbox>
</annotation>  

我想添加新的SubElement

<?xml version='1.0' encoding='ASCII'?>
    <annotation>
      <filename>2007.jpg</filename>
      <size>
        <width>1820</width>
        <height>940</height>
      </size>
      <object>
        <name>Car</name>
        <bndbox>
          <xmin>74.0</xmin>
          <ymin>509.0</ymin>
          <xmax>236.0</xmax>
          <ymax>609.0</ymax>
        </bndbox>
    </annotation>  

我正在尝试这样:

import xml.etree.ElementTree as ET
import os
doc = ET.parse('00390.xml')
root = doc.getroot()
s = '/image/00390.jpg'
filename = (os.path.basename(s))
userElement = ET.Element("annotation")
newSub = ET.SubElement(userElement, "filename")
newSub.set(filename, '')
root.insert(0, newSub)
tree = ET.ElementTree(root)
tree.write(open('3.xml', 'w'), encoding = 'UTF-8')

接收到输出:<filename 00390.jpg=""/>虽然输出应该是<filename>00390.jpg</filename>我认为问题是使用newSub.set(),它需要3个输入参数。

AzyCrw4282

您新问题的更新答案

import xml.etree.ElementTree as ET
import os
doc = ET.parse('00390.xml')
root = doc.getroot()
s = '/image/00390.jpg'
filename = (os.path.basename(s))
userElement = ET.Element("annotation")
newSub = ET.SubElement(userElement, "filename")
newSub.set(filename, '')#<----- ***** 
root.insert(0, newSub)
tree = ET.ElementTree(root)
tree.write(open('3.xml', 'w'), encoding = 'UTF-8')

此输出将返回

<filename 00390.jpg=""/>

代替

<filename>00390.jpg</filename>

这是因为在(*)处设置的是属性值,而不是XML子元素标记中的文本。

为您解决问题,替换该newSub.set(filename, '')

newSub.text = filename#Assigns text
root.insert(0,newSub)
#Returns this <filename>00390.jpg</filename>

在这里查看示例

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将新条目添加到现有XML文件中(DOM除外)

使用SplFileObject将新行添加到现有TXT文件中

ffmpeg:将新的音轨添加到现有文件

将 DataGridView 的内容添加到现有 XML 文件

使用XSLT将新节点添加到现有XML的特定位置

使用powershell将具有多个值的元素添加到现有xml文件

将列添加到csv文件中,并基于现有列powershell填充新列

将新元素添加到现有XML中

如何使用c#将xml节点集添加到现有文件

Groovy-使用echoxml将节点添加到现有XML文件

使用Bash将输入添加到现有文件

使用Pandas DataFrame将新行添加到现有CSV中

使用XLConnect的appendWorksheet函数将新行添加到现有Excel表中

仅使用stripe.js将新卡添加到Stripe中的现有客户

使用MegaCLI将新硬盘添加到Linux中的现有RAID0

如何使用Golang将文件添加到现有的zip文件中

使用7zip将密码添加到现有zip文件中

如何使用python将列添加到现有的Excel文件中?

使用熊猫将工作表添加到现有的Excel文件中

如何使用字典将新字典添加到现有的json文件中?

使用python将列表中的数字添加到现有文件

如何使用C#将Datagridview添加到现有的Excel文件中

使用ffmpeg将音频流添加到文件中,并保留现有流

使用Augeas将新节点添加到XML文件

如何将新的jar文件添加到服务器中现有的已部署jar

使用h5py沿新轴将数据添加到现有h5py文件

将新节点添加到一组现有节点(Perl XML :: LibXML)

如何将新表中的新外键添加到现有记录

如何使用codeigniter中的会话动态地将新数组添加到现有数组中