strings.xml匹配替换

将两个Android项目中的多语言字符串文件(strings.xml)进行比较,如果其中一个项目中包含另一个项目没有的字符,则合并到单一的输出文件,并以 key 在原始 XML 文件中更新 value 值。如果key匹配不准确则忽略它。

具体来说:

  1. 引入 re, xml.etree.ElementTree 和 argparse 模块。
  2. 定义命令行参数 parser。
  3. 解析输入、源和输出XML文件,并得到其 root 节点。
  4. 将所有 a.xml 中的 key-value 存储在字典 a_dict 中。
  5. 遍历 b.xml 的 string 标签,使用正则表达式判断每个键是否与a_dict相等且值不同,然后更新为a_dict中的值。
  6. 保存修改后的b_tree到指定的输出路径。
  7. 打印成功执行修改操作的消息。

该代码涉及解析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修改的更多相关文章

  1. 不可不知的 Android strings.xml 那些事

    相信 strings.xml 已经是大家在 Android 开发中最熟悉的文件之一了,但其实它也有很多需要注意的地方和一些小技巧,知道了这些可以让你的 Android 应用更加规范易用,大家来看看吧. ...

  2. Android Strings.xml To CSV / Excel互转

    Android Strings.xml To CSV/Excel互转https://blog.csdn.net/hzxpyjq/article/details/50686983https://blog ...

  3. android strings.xml转义字符, 注意细节解决(转)

    XML转义字符 以下为XML标志符的数字和字符串转义符 "     (" 或 ") '     (' 或 ') &     (& 或 & ...

  4. 【转载】不可不知的 Android strings.xml 那些事

    相信 strings.xml 已经是大家在 Android 开发中最熟悉的文件之一了,但其实它也有很多需要注意的地方和一些小技巧,知道了这些可以让你的 Android 应用更加规范易用,大家来看看吧. ...

  5. (转载)ANDROID STRINGS.XML 中的特殊字符转义

    今天项目碰到个转义特殊字符的问题,网上搜索看到,故转载,已标明出处: 项目中要在string.xml 中显示特殊符号.如@号冒号等.直接写肯定不行啦 只能考虑使用ASCII码进行显示.在XML中空格符 ...

  6. Android strings.xml中定义字符串显示空格

    <string name="str">字 符 串</string> 其中   就表示空格.如果直接在里面键入空格,无论多少空格都只会显示一个. 用的XML转 ...

  7. android strings.xml 报 is not translated in af,

    57 down vote In your ADT go to window->Preferences->Android->Lint Error Checking Find there ...

  8. 修改Android中strings.xml文件, 动态改变数据

    有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法.strings.xml中节点是支持占位符的,如下所示: <string name=&qu ...

  9. 【我的Android进阶之旅】解决strings.xml格式化占位符错误: Multiple substitutions specified in non-positional format

    今天有一个Android新手使用strings.xml进行格式化的时候报了占位符错误, Multiple substitutions specified in non-positional forma ...

  10. 关于Android中res目录strings.xml文件中的转义字符之笔录

    res目录strings.xml文件中的转义字符:         ------------------>     代表着一个汉字的位置:                        ---- ...

随机推荐

  1. 如何使用Photino创建Blazor项目进行跨平台

    Photino是什么 Photino是一组使用Web (HTML/CSS/JavaScript)UI创建桌面应用程序的技术.TryPhotino.io 维护 .NET 构建,并鼓励社区开发 Photi ...

  2. 【深入浅出 Yarn 架构与实现】5-3 Yarn 调度器资源抢占模型

    本篇将对 Yarn 调度器中的资源抢占方式进行探究.分析当集群资源不足时,占用量资源少的队列,是如何从其他队列中抢夺资源的.我们将深入源码,一步步分析抢夺资源的具体逻辑. 一.简介 在资源调度器中,以 ...

  3. Pause Giant AI Experiments: An Open Letter(暂停大型人工智能实验: 一封公开信)

    Pause Giant AI Experiments: An Open Letter(暂停大型人工智能实验: 一封公开信) 前几天在 futureoflife 网站上有一封公开信,呼吁暂停大型人工智能 ...

  4. Redis面试必问题(一)缓存穿透、缓存击穿、缓存雪崩

    一.缓存穿透(数据库没有,缓存没有) 1.概念 当查询Redis中没有数据时,该查询会下沉到数据库层,同时数据库层也没有该数据,当出现大量这种查询(或被恶意攻击)时,接口的访问全部透过Redis访问数 ...

  5. VideoPipe可视化视频结构化框架更新总结(2023-3-30)

    项目地址:https://github.com/sherlockchou86/video_pipe_c 往期文章:https://www.cnblogs.com/xiaozhi_5638/p/1696 ...

  6. 【原理揭秘】Vite 是怎么兼容老旧浏览器的?你以为仅仅依靠 Babel?

    作者:京东科技 孙凯 一.前言 对前端开发者来说,Vite 应该不算陌生了,它是一款基于 nobundle 和 bundleless 思想诞生的前端开发与构建工具,官网对它的概括和期待只有一句话:&q ...

  7. python标准模块之subprocess

    subprocess --- 子进程管理 源代码: Lib/subprocess.py 写在前面: 感觉也就这俩有用: subprocess.run() subprocess.Popen()   w下 ...

  8. LeeCode 316周赛复盘

    T1:判断两个事件是否存在冲突 思路:判断两个区间是否有交集 public boolean haveConflict(String[] event1, String[] event2) { // 比较 ...

  9. day93:flask:Cookie&Session&请求钩子&捕获错误&上下文&Flask-Script

    目录 1.HTTP的会话控制 2.Cookie 3.Session 4.请求钩子 5.捕获错误 6.上下文:context 7.Flask-Script 1.HTTP的会话控制 1.什么是会话控制? ...

  10. 两分钟操作完成用VScode连接MySQL查询数据

    第一步:下载一个插件,MySQL Syntax 安装后要是重启或刷新后没有出现 再安装一个MySQL 第二步:下载vscode-database 第三步:把需要的插件下载好后,接下来就开始操作  输入 ...