Android strings.xml按照key修改
strings.xml匹配替换
将两个Android项目中的多语言字符串文件(strings.xml)进行比较,如果其中一个项目中包含另一个项目没有的字符,则合并到单一的输出文件,并以 key 在原始 XML 文件中更新 value 值。如果key匹配不准确则忽略它。
具体来说:
- 引入 re, xml.etree.ElementTree 和 argparse 模块。
- 定义命令行参数 parser。
- 解析输入、源和输出XML文件,并得到其 root 节点。
- 将所有 a.xml 中的 key-value 存储在字典 a_dict 中。
- 遍历 b.xml 的 string 标签,使用正则表达式判断每个键是否与a_dict相等且值不同,然后更新为a_dict中的值。
- 保存修改后的b_tree到指定的输出路径。
- 打印成功执行修改操作的消息。
该代码涉及解析XML文件、字典处理、正则表达式匹配、文件读写和命令行接口设计。
import re
from lxml import etree
import argparse
parser = argparse.ArgumentParser(description='Process android strings.xml files.')
parser.add_argument('-i', '--input', type=str, help='the source xml file as input')
parser.add_argument('-s', '--source', type=str, default='strings.xml',
help='the xml file will be modified') # 指定默认的文件名
parser.add_argument('-o', '--output', type=str, default='strings.xml',
help='path to the output xml file') # 指定默认的文件名
args = parser.parse_args()
print(args)
a_tree = etree.parse(args.input)
a_root = a_tree.getroot()
b_tree = etree.parse(args.source)
b_root = b_tree.getroot()
# 遍历 a.xml 中所有 string 标签,将其键值对存储到字典 a_dict 中
a_dict = {}
for string in a_root.iter('string'):
key = string.attrib['name']
value = string.text
a_dict[key] = value
# 遍历 b.xml 中所有 string 标签,若和 a_dict 的 key 完全匹配且 value 不同,则更新为 a_dict 的 value
visited_keys = set()
for string in b_root.iter('string'):
key = string.attrib['name']
if key not in visited_keys:
visited_keys.add(key)
if key in a_dict and string.text != a_dict[key]:
# 使用正则表达式判断两个 key 是否完全一致
pattern = f"^{key}$"
is_matched = bool(re.match(pattern, key))
if is_matched:
string.text = a_dict[key]
# 保存修改后的 b.xml 文件
b_tree.write(args.output, encoding='utf-8', xml_declaration=True)
print(f"Successfully saved as {args.output}.")
Android strings.xml按照key修改的更多相关文章
- 不可不知的 Android strings.xml 那些事
相信 strings.xml 已经是大家在 Android 开发中最熟悉的文件之一了,但其实它也有很多需要注意的地方和一些小技巧,知道了这些可以让你的 Android 应用更加规范易用,大家来看看吧. ...
- Android Strings.xml To CSV / Excel互转
Android Strings.xml To CSV/Excel互转https://blog.csdn.net/hzxpyjq/article/details/50686983https://blog ...
- android strings.xml转义字符, 注意细节解决(转)
XML转义字符 以下为XML标志符的数字和字符串转义符 " (" 或 ") ' (' 或 ') & (& 或 & ...
- 【转载】不可不知的 Android strings.xml 那些事
相信 strings.xml 已经是大家在 Android 开发中最熟悉的文件之一了,但其实它也有很多需要注意的地方和一些小技巧,知道了这些可以让你的 Android 应用更加规范易用,大家来看看吧. ...
- (转载)ANDROID STRINGS.XML 中的特殊字符转义
今天项目碰到个转义特殊字符的问题,网上搜索看到,故转载,已标明出处: 项目中要在string.xml 中显示特殊符号.如@号冒号等.直接写肯定不行啦 只能考虑使用ASCII码进行显示.在XML中空格符 ...
- Android strings.xml中定义字符串显示空格
<string name="str">字 符 串</string> 其中 就表示空格.如果直接在里面键入空格,无论多少空格都只会显示一个. 用的XML转 ...
- android strings.xml 报 is not translated in af,
57 down vote In your ADT go to window->Preferences->Android->Lint Error Checking Find there ...
- 修改Android中strings.xml文件, 动态改变数据
有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法.strings.xml中节点是支持占位符的,如下所示: <string name=&qu ...
- 【我的Android进阶之旅】解决strings.xml格式化占位符错误: Multiple substitutions specified in non-positional format
今天有一个Android新手使用strings.xml进行格式化的时候报了占位符错误, Multiple substitutions specified in non-positional forma ...
- 关于Android中res目录strings.xml文件中的转义字符之笔录
res目录strings.xml文件中的转义字符: ------------------> 代表着一个汉字的位置: ---- ...
随机推荐
- 如何使用Photino创建Blazor项目进行跨平台
Photino是什么 Photino是一组使用Web (HTML/CSS/JavaScript)UI创建桌面应用程序的技术.TryPhotino.io 维护 .NET 构建,并鼓励社区开发 Photi ...
- 【深入浅出 Yarn 架构与实现】5-3 Yarn 调度器资源抢占模型
本篇将对 Yarn 调度器中的资源抢占方式进行探究.分析当集群资源不足时,占用量资源少的队列,是如何从其他队列中抢夺资源的.我们将深入源码,一步步分析抢夺资源的具体逻辑. 一.简介 在资源调度器中,以 ...
- Pause Giant AI Experiments: An Open Letter(暂停大型人工智能实验: 一封公开信)
Pause Giant AI Experiments: An Open Letter(暂停大型人工智能实验: 一封公开信) 前几天在 futureoflife 网站上有一封公开信,呼吁暂停大型人工智能 ...
- Redis面试必问题(一)缓存穿透、缓存击穿、缓存雪崩
一.缓存穿透(数据库没有,缓存没有) 1.概念 当查询Redis中没有数据时,该查询会下沉到数据库层,同时数据库层也没有该数据,当出现大量这种查询(或被恶意攻击)时,接口的访问全部透过Redis访问数 ...
- VideoPipe可视化视频结构化框架更新总结(2023-3-30)
项目地址:https://github.com/sherlockchou86/video_pipe_c 往期文章:https://www.cnblogs.com/xiaozhi_5638/p/1696 ...
- 【原理揭秘】Vite 是怎么兼容老旧浏览器的?你以为仅仅依靠 Babel?
作者:京东科技 孙凯 一.前言 对前端开发者来说,Vite 应该不算陌生了,它是一款基于 nobundle 和 bundleless 思想诞生的前端开发与构建工具,官网对它的概括和期待只有一句话:&q ...
- python标准模块之subprocess
subprocess --- 子进程管理 源代码: Lib/subprocess.py 写在前面: 感觉也就这俩有用: subprocess.run() subprocess.Popen() w下 ...
- LeeCode 316周赛复盘
T1:判断两个事件是否存在冲突 思路:判断两个区间是否有交集 public boolean haveConflict(String[] event1, String[] event2) { // 比较 ...
- day93:flask:Cookie&Session&请求钩子&捕获错误&上下文&Flask-Script
目录 1.HTTP的会话控制 2.Cookie 3.Session 4.请求钩子 5.捕获错误 6.上下文:context 7.Flask-Script 1.HTTP的会话控制 1.什么是会话控制? ...
- 两分钟操作完成用VScode连接MySQL查询数据
第一步:下载一个插件,MySQL Syntax 安装后要是重启或刷新后没有出现 再安装一个MySQL 第二步:下载vscode-database 第三步:把需要的插件下载好后,接下来就开始操作 输入 ...