python 获取xml文件指定节点路径的值并修改

本文介绍了如何使用Python的xml.etree.ElementTree库,配合XPath表达式,在XML文件中查找并精确修改特定节点的值,以`find_and_modify_node_in_file`函数为例,展示了文件操作、节点定位和值替换的过程。
摘要由CSDN通过智能技术生成

如果您有一个 XML 文件而非字符串,并希望按照节点路径精确获取某个节点的值并对其进行修改,可以使用 xml.etree.ElementTree 库配合 XPath 表达式来实现。以下是一个示例,演示如何打开 XML 文件、按照节点路径查找并修改 <EndTime> 节点的值,然后保存更新后的 XML 文件:

 

python

import xml.etree.ElementTree as ET

def find_and_modify_node_in_file(xml_file_path, xpath_expr, new_value):
    """
    打开指定XML文件,使用XPath表达式查找节点并将其文本内容修改为新的值,然后保存更新后的文件。

    参数:
    xml_file_path (str): XML文件路径。
    xpath_expr (str): XPath表达式,用于定位要修改的节点。
    new_value (str): 要替换的节点新值。
    """
    try:
        # 打开并解析XML文件
        tree = ET.parse(xml_file_path)
        root = tree.getroot()

        # 查找并修改节点
        node = root.find(xpath_expr)
        if node is not None:
            node.text = new_value
            tree.write(xml_file_path, encoding='utf-8', xml_declaration=True)
            print(f"<EndTime>节点的值已修改为: {new_end_time_value}")
        else:
            print("<EndTime>节点未找到,无法修改")
    except FileNotFoundError:
        print(f"XML文件'{xml_file_path}'不存在")
    except ET.ParseError:
        print(f"无法解析XML文件'{xml_file_path}'")
    except ET.XPathEvalError:
        print("XPath表达式错误")

# 定义XML文件路径
xml_file_path = '/path/to/your/xml_file.xml'

# 定义节点路径(XPath表达式)
xpath_to_find = './/level1/level2/EndTime'

# 新的结束时间值
new_end_time_value = '2026-01-12 09:30:00'

find_and_modify_node_in_file(xml_file_path, xpath_to_find, new_end_time_value)

这段代码定义了一个 find_and_modify_node_in_file 函数,它接受 XML 文件路径、一个 XPath 表达式以及新值作为参数。函数首先使用 parse() 方法打开并解析 XML 文件,得到根节点。接着,使用 find() 方法结合提供的 XPath 表达式查找匹配的节点。如果找到节点,就将其文本内容(.text 属性)设置为新的值,并使用 write() 方法保存更新后的 XML 文件。在整个过程中,函数捕获并处理可能出现的异常,如文件不存在、XML解析错误或XPath表达式错误。

在主程序中,我们定义了 XML 文件路径、一个表示 <EndTime> 节点路径的 XPath 表达式以及新的结束时间值。然后,调用 find_and_modify_node_in_file 函数完成查找、修改和保存操作。

请根据实际的 XML 文件路径、节点路径调整相关参数。注意,修改操作会直接在原始文件上进行,如果需要保留原文件,可以先复制一份副本,然后在副本上进行修改。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值