使用PowerShell修改XML文件中的指定元素
嘿,我来帮你搞定修改这个XML指定元素的事儿!咱先把你的XML内容整理得更清晰些,方便后续操作:
<?xml version="1.0" encoding="utf-8"?> <recording-event> <video hashType="none"> <streams> <stream num="1" start-tick="01234567890" stop-tick="02134567890"> <file name="FileName.mp4" hashCode="123456789" /> <file name="FileName.vtt" hashCode="987654312" /> <file name="FileName.json" hashCode="10111213" /> </stream> </streams> </video> </recording-event>
下面给你几种常用的修改方案,按需选就行:
方案1:用Python标准库
xml.etree.ElementTree(无需额外安装) 适合不想装第三方库的场景,足够应付大部分基础修改需求。
例子1:修改stream标签的start-tick属性
import xml.etree.ElementTree as ET # 解析XML文件(如果是字符串内容,就用ET.fromstring(xml_str)) tree = ET.parse("your_xml_file.xml") root = tree.getroot() # 定位到num为1的stream元素 target_stream = root.find(".//stream[@num='1']") # 修改start-tick属性值 target_stream.set("start-tick", "09876543210") # 保存修改后的XML,保留UTF-8编码和声明 tree.write("modified_xml.xml", encoding="utf-8", xml_declaration=True)
例子2:修改指定file的hashCode
比如要更新FileName.vtt的哈希值:
import xml.etree.ElementTree as ET tree = ET.parse("your_xml_file.xml") root = tree.getroot() # 定位到name为FileName.vtt的file元素 vtt_file = root.find(".//file[@name='FileName.vtt']") # 更新hashCode属性 vtt_file.set("hashCode", "112233445566") tree.write("modified_xml.xml", encoding="utf-8", xml_declaration=True)
方案2:用Python的
lxml库(更强大的XML处理) 如果你的XML结构复杂,需要更灵活的XPath查询,lxml是更好的选择。先安装依赖:
pip install lxml
示例修改代码
from lxml import etree # 解析XML文件 tree = etree.parse("your_xml_file.xml") root = tree.getroot() # 例子1:修改stream的stop-tick属性 target_stream = root.xpath("//stream[@num='1']")[0] target_stream.set("stop-tick", "01112223333") # 例子2:修改FileName.json的hashCode json_file = root.xpath("//file[@name='FileName.json']")[0] json_file.set("hashCode", "9988776655") # 保存时可以开启pretty_print让XML格式更美观 tree.write("modified_xml.xml", encoding="utf-8", xml_declaration=True, pretty_print=True)
方案3:命令行快速修改(适合简单场景)
如果你用Linux/macOS,或者Windows装了Git Bash/WSL,可以用sed做快速文本替换(注意:只适合XML结构简单、不会出现属性值重复的情况):
# 替换stream的start-tick值 sed -i 's/start-tick="01234567890"/start-tick="09876543210"/g' your_xml_file.xml # 替换FileName.mp4的hashCode sed -i 's/hashCode="123456789"/hashCode="666777888"/g' your_xml_file.xml
如果XML结构复杂,还是建议用专门的XML处理库,避免替换出错。
内容的提问来源于stack exchange,提问作者sms5138
相关产品推荐
相关产品推荐

