Python中如何将类XML文件内的param标签替换为对应文本值
Python实现类XML文件中param标签替换的方案
由于你的文件是ZPL打印指令与自定义param标签混合的格式,不适合用标准XML解析器(非XML的ZPL内容会导致解析报错),推荐用正则匹配的方案实现替换,操作简单且兼容性好。
具体实现代码
import re # 1. 定义参数映射:key为param标签的id属性值,value为要替换成的目标文本 param_mapping = { "P_ARTYKULNAZWA": "10.10.10", "P_BARCODEIKEA": "987654321012", "P_TODAY": "2024-06-15", "P_CURRENTSHIFT": "A班", "P_LABELNUMBER": "047" } # 2. 正则匹配规则:兼容param标签中存在多余空格的场景 param_pattern = re.compile(r'<param\s+id="([^"]+)"\s*/>') def replace_param_tags(content: str, mapping: dict) -> str: """ 替换内容中所有param标签为对应文本 默认找不到对应参数的标签会保持原样不替换 """ def replace_callback(match: re.Match) -> str: param_id = match.group(1) return mapping.get(param_id, match.group(0)) return param_pattern.sub(replace_callback, content) # 3. 读写文件执行替换 if __name__ == "__main__": # 读取源文件内容 with open("你的源文件路径", "r", encoding="utf-8") as f: file_content = f.read() # 执行标签替换 result = replace_param_tags(file_content, param_mapping) # 输出结果或保存到新文件 print(result) with open("替换后文件路径", "w", encoding="utf-8") as f: f.write(result)
提示:如果需要匹配不到参数时直接删除原标签,可将
mapping.get(param_id, match.group(0))修改为mapping.get(param_id, "")即可
效果验证
以你给出的示例参数P_ARTYKULNAZWA值为10.10.10为例,替换后原内容行:
^FT30,480^A0N,34^FH\^FD<param id="P_ARTYKULNAZWA" />^FS
会自动转为:
^FT30,480^A0N,34^FH\^FD10.10.10^FS
可选方案说明
如果后续你的文件调整为纯XML格式(无ZPL等其他非XML内容),可以用Python内置的xml.etree.ElementTree模块做节点替换,规范性更强,适合纯XML场景使用。
内容的提问来源于stack exchange,提问作者Marcin
相关产品推荐
相关产品推荐

