【问题标题】:Rename object in lxml重命名lxml中的对象
【发布时间】:2021-06-30 10:04:10
【问题描述】:

假设我们有一个这样的 xml 文件:

<annotation verified="yes">
  <folder>Annotation</folder>
  <filename>test_file</filename>
  <path>voc/JPEGImages/test_file</path>
  <source>
    <database>Unknown</database>
  </source>
  <size>
    <width>640</width>
    <height>480</height>
    <depth>3</depth>
  </size>
  <segmented>0</segmented>
  <object>
    <name>old_name</name>
    <pose>Unspecified</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>
      <xmin>15</xmin>
      <ymin>164</ymin>
      <xmax>206</xmax>
      <ymax>344</ymax>
    </bndbox>
  </object>
</annotation>

现在我想更改给定 xml 文件中所有对象的名称。

我写了以下函数:

def _rename_objects(tree, path, new_name="new_name"):
    root = tree.getroot()
    for rank in root.iter('object'):
        rank.text = str(new_name)
    tree.write(path)

它的作用是将文本放置到对象中。如何替换“名称”中的值?不幸的是,树元素并不能真正用于调试。

<Element 'object' at 0x11235d400>

_rename_objects 之后的新值如下所示:

  <segmented>0</segmented>
  <object>new_name<name>old_name</name>
    <pose>Unspecified</pose>

【问题讨论】:

    标签: python xml lxml rename


    【解决方案1】:

    您需要使用[0] 索引来获取节点内容,而不是节点本身。

    rank <Element object>
    rank[0] <Element name>
    
    for rank in root.iter("object"):
        rank[0].text = str(new_name)
    

    输出:

    <name>new_name</name>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-10
      • 2020-06-02
      • 2016-09-04
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 2019-10-18
      相关资源
      最近更新 更多