使用python插入XML

2024-10-04 11:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个python代码,以便在ID匹配的情况下插入一个子元素。我试图插入到下一行,但它恰好添加到与我的ID匹配的同一个节点中

import xml.etree.ElementTree as ET
import re
XMLFILE = "sample.xml"
mytree = ET.parse(XMLFILE)
myroot = mytree.getroot()
global update 
id = "C0"
for attr in myroot.iter():
    ver_name= attr
    if(ver_name.tag == 'name'):
        update=ver_name
    if(attr.tag == 'ID'):
            if(re.match(attr.text,id)):
                new_name = 'CAT'
                update.text= str(new_name)

                nm = ET.SubElement(attr, "name")
                nm.text="peris"
                mytree.write(XMLFILE)

输入xml:

<api nu ="F7">
          <name>CAT</name>
          <ID>C0</ID>         
</api>

预期产出:

<api nu ="F7">
          <name>CAT</name>
          <ID>C0</ID>
          <name>peris</name>
          
    </api>

实际产量:

<api nu ="F7">
          <name>CAT</name>
          <ID>C0<name>peris</name></ID>
          
    </api>

如有任何见解,将不胜感激


Tags: textnameapiidifupdatexmlet
1条回答
网友
1楼 · 发布于 2024-10-04 11:25:56

您正在attr元素上(即下面)添加一个子元素,因此不知道为什么您会对该元素添加到下面感到惊讶

对于XML,您只需使用:

newel=ET.SubElement(myroot,”name”)`

一般来说,如果更难找到,例如在层次结构的较低位置,而不是使用iter,我会使用:

for api_el in ET.findall(myroot,‘.//api’):
    … do something with api_el

或者,如果您只想检查包含名称的api:

for api_el in ET.findall(myroot,‘.//api/name/..’):
    … do something with api_el

绝对值得学习ElementTree xpathhttps://docs.python.org/3/library/xml.etree.elementtree.html?highlight=xpath-首先让findall只使用xpath的第一部分,例如.//api,一旦完成该部分工作,就添加xpath的下一部分,例如.//api/name

相关问题 更多 >