所以我有一个XML,它有多行生日,但元素不同. 例如,在我的XML中有这样几行代码:

<date-of-birth>12-3-1998</date-of-birth>
<date-of-birth>12-3-1998</date-of-birth>
<date-of-birth>12-3-1998</date-of-birth>
<date-of-birth>31-7-1941</date-of-birth>
<date-of-birth>23-11-1965</date-of-birth>

我想把只有道布"12-3-1998"的台词改成道布"14-11-2001" ,其他的保持不变,但我在努力寻找如何做到这一点而不全部更改或不更改.

我试着这样做:

import xml.etree.ElementTree as ET
xml_tree = ET.parse(TestXML.xml)
root = xml_tree.getroot()
for DOB in root.findall(".//{*}12-3-1998"):
     DOB.text = "14-11-2001"
ET.tostring(root)

但是我的root.findall(".//{*}12-3-1998")没有发现任何东西,所以我所有的DOB都保持不变

我试着做了以下几件事,但它改变了我所有的道布元素,我只想改变那些有12-3-1998的元素:

import xml.etree.ElementTree as ET
xml_tree = ET.parse(TestXML.xml)
root = xml_tree.getroot()
for DOB in root.findall(".//{*}date-of-birth"):
     DOB.text = "14-11-2001"
ET.tostring(root)

所以我想知道是否有一种方法可以过滤我想要更改的特定的道布,无论它是使用ElementTree还是另一个Python库?

推荐答案

IIUC,您可以:

import xml.etree.ElementTree as ET

data = """
<data>
    <date-of-birth>12-3-1998</date-of-birth>
    <date-of-birth>12-3-1998</date-of-birth>
    <date-of-birth>12-3-1998</date-of-birth>
    <date-of-birth>31-7-1941</date-of-birth>
    <date-of-birth>23-11-1965</date-of-birth>
</data>
"""

root = ET.fromstring(data)

for dob in root.findall("date-of-birth"):
    if dob.text == "12-3-1998":
        dob.text = "14-11-2001"

print(ET.tostring(root).decode("utf-8"))

打印:

<data>
    <date-of-birth>14-11-2001</date-of-birth>
    <date-of-birth>14-11-2001</date-of-birth>
    <date-of-birth>14-11-2001</date-of-birth>
    <date-of-birth>31-7-1941</date-of-birth>
    <date-of-birth>23-11-1965</date-of-birth>
</data>

Python相关问答推荐

如何销毁框架并使其在tkinter中看起来像以前的样子?

Python中是否有方法从公共域检索搜索结果

Pythind 11无法弄清楚如何访问tuple元素

使用numpy提取数据块

如何使用symy打印方程?

韦尔福德方差与Numpy方差不同

删除最后一个pip安装的包

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

在vscode上使用Python虚拟环境时((env))

从spaCy的句子中提取日期

使用groupby方法移除公共子字符串

删除marplotlib条形图上的底边

调用decorator返回原始函数的输出

在matplotlib中删除子图之间的间隙_mosaic

numpy.unique如何消除重复列?

(Python/Pandas)基于列中非缺失值的子集DataFrame

在代码执行后关闭ChromeDriver窗口

交替字符串位置的正则表达式

什么是一种快速而优雅的方式来转换一个包含一串重复的列,而不对同一个值多次运行转换,

按条件添加小计列