You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python 3.4的ElementTree获取并更新XML中的Phone值

如何用Python 3.4的ElementTree更新XML中的Phone字段值?

嘿,我来帮你搞定这个问题!你已经有了解析XML的基础代码,现在只需要针对Phone字段做定位、取值和更新这几步就行,具体操作如下:

首先先回顾下你的XML结构:

return (<Details>
  <Attrib name="Name">bill</Attrib>
  <Attrib name="Email">bill.jones@mail.com</Attrib>
  <Attrib name="Phone">555-000-555</Attrib>
</Details>
)

你之前的代码只打印了节点的标签和属性,但没访问到节点的文本内容(也就是Phone字段的实际值)——这个内容存在节点的text属性里。接下来分两种方式实现需求:

方式一:和现有代码风格一致的循环遍历

这种方式和你当前的遍历逻辑保持统一,不需要额外学习新语法:

import xml.etree.ElementTree as ET

tree = ET.parse('file.xml')
root = tree.getroot()

# 遍历所有子节点,找到name属性为"Phone"的Attrib节点
for child in root:
    # 检查当前节点的name属性是否是Phone
    if child.attrib.get('name') == 'Phone':
        # 获取当前Phone字段的值
        current_phone = child.text
        print(f"当前Phone值:{current_phone}")
        # 更新为你需要的新值
        child.text = "555-123-456"
        print(f"更新后的Phone值:{child.text}")

# 非常重要:把修改后的内容写回原文件(或者指定新文件路径)
tree.write('file.xml')

方式二:用XPath快速定位节点(更简洁)

Python 3.4的ElementTree已经支持基础的XPath语法,能直接定位到目标节点,省去循环的麻烦:

import xml.etree.ElementTree as ET

tree = ET.parse('file.xml')
root = tree.getroot()

# 用XPath查找name属性为"Phone"的Attrib节点
phone_node = root.find(".//Attrib[@name='Phone']")

if phone_node is not None:
    # 获取当前值
    current_phone = phone_node.text
    print(f"当前Phone值:{current_phone}")
    # 更新值
    phone_node.text = "555-789-012"
    # 保存修改
    tree.write('file.xml')
else:
    print("未找到name为Phone的字段,请检查XML结构")

关键注意点

  • 节点的实际值存在text属性中,这是你之前代码没触及的部分
  • 修改完成后必须调用tree.write(),否则所有修改只存在于内存中,不会保存到磁盘文件
  • 如果要避免覆盖原文件,可以给tree.write()传入新的文件名,比如tree.write('updated_file.xml')

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:19:55