如何在不修改原文件且不生成新文件的情况下编辑XML?
问题解决方法
为什么直接读取字符串无法编辑
open("cool.xml").read()得到的是纯字符串,不是结构化的XML对象,所以没法直接像操作XML节点那样进行编辑(比如修改标签、属性、文本内容)。要编辑XML,必须先把字符串解析成可操作的DOM对象。
处理步骤(以Python内置库为例)
1. 解析XML为可操作对象
使用Python内置的xml.etree.ElementTree库,直接解析文件(或已读取的字符串)得到可操作的节点对象:
import xml.etree.ElementTree as ET # 直接解析本地XML文件(比先read再解析更高效) tree = ET.parse("cool.xml") root = tree.getroot() # 如果已经用read得到了字符串comment_2,可这样解析 # root = ET.fromstring(comment_2)
2. 编辑内存中的XML对象
拿到root节点后,就可以进行各种编辑操作:
- 修改节点文本:
# 找到第一个<description>节点并修改文本 desc_node = root.find("description") if desc_node is not None: desc_node.text = "updated description content" - 修改节点属性:
# 修改root节点的"status"属性 root.set("status", "processed") - 添加新子节点:
new_subnode = ET.Element("log") new_subnode.text = "edited at 2024-05-20" root.append(new_subnode)
能否不修改原文件且不生成新文件编辑?
完全可以。上述所有编辑操作都只针对内存中的XML对象(root和tree),不会改动原cool.xml文件,也不需要生成新的XML文件。后续你可以直接使用这个内存中的对象完成其他操作,比如:
- 序列化成字符串用于网络请求或内存处理:
edited_xml_str = ET.tostring(root, encoding="utf-8").decode("utf-8") - 继续进行节点查询、数据提取等操作
内容的提问来源于stack exchange,提问作者Ajith MS
相关产品推荐
相关产品推荐

