首页 > 其他分享 >Android strings.xml按照key修改

Android strings.xml按照key修改

时间:2023-06-02 11:22:57浏览次数:42  
标签:xml string args dict key Android strings

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
import xml.etree.ElementTree as ET 
import argparse

parser = argparse.ArgumentParser(description='Process android strings.xml files.')
parser.add_argument('input_xml', type=argparse.FileType('r'), help='the source xml file as input')
parser.add_argument('source_xml', type=argparse.FileType('r+'), default='strings.xml',  help='the xml file will be modified')
parser.add_argument('-o', '--output', type=argparse.FileType('w'), default='strings.xml', help='path to the output xml file')

args = parser.parse_args()

# 解析 a.xml 文件
a_tree = ET.parse(args.input_xml) 
a_root = a_tree.getroot() 

# 解析 b.xml 文件
b_tree = ET.parse(args.source_xml) 
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
for string in b_root.iter('string'):
    key = string.attrib['name']
    
    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.name, encoding='utf-8', xml_declaration=True)

print(f"Successfully saved as {args.output.name}.")

标签:xml,string,args,dict,key,Android,strings
From: https://www.cnblogs.com/imorning/p/17451216.html

相关文章

  • RedisTemplate关于key出现前缀\xac\xed\x00\x05t\x00\x0f
    原因:key没有进行序列化,需要加入redis的配置进行序列化/***@Authorjohnson*@Date2023/6/2*/@ConfigurationpublicclassRedisConfig{@BeanpublicRedisTemplate<String,Object>redisTemplate(RedisConnectionFactoryredisConnectionFactory){......
  • Android获取当前系统日期和时间的三种方法
    第一种方法SimpleDateFormatsimpleDateFormat=newSimpleDateFormat("yyyy年MM月dd日HH:mm:ss");//HH:mm:ss//获取当前时间Datedate=newDate(System.currentTimeMillis());time1.setText("Date获取当前日期时间"+simpleDateFormat.format(date)); ......
  • [论文速览] DropKey
    Pretitle:DropKeyaccepted:CVPR2023paper:https://arxiv.org/abs/2208.02646code:inpaper关键词:Transformer,dropout,阅读理由:方法简单通用,效果又好像很好,(组会)Idea在注意力计算阶段随机drop部分key以鼓励网络捕获目标对象的全局信息,从而避免了由过于聚焦局部......
  • linphone-sdk-android网络检测分析
    原文 linphone-sdk-android网络检测分析-掘金(juejin.cn)前言好久没写linphone-sdk-android相关的文章了,上一篇文章还是一个月之前,经过上次修改linphone-sdk-android后最近没有啥问题发生,本文记录下之前遇到的linphone网络问题的坑。注:笔者的App作为Launcher......
  • 成品直播源码推荐,Android 自定义颜色样式
    成品直播源码推荐,Android自定义颜色样式<?xmlversion="1.0"encoding="utf-8"?><resources>  <colorname="colorPrimary">#7bb736</color>  <colorname="colorPrimaryDark">#16c24b</color>  <c......
  • SSH交互式脚本StrictHostKeyChecking选项 benchmode=yes
    SSH公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击。但是在特定情况下,严格的SSH公钥检查会破坏一些依赖SSH协议的自动化任务,就需要一种手段能够绕过SSH的公钥检查。什么是SSH公钥检查SSH连接远程主机时,会检查主机的公钥。如果是第一次该主机,会显示该主机的公......
  • android ImageView 设定宽度铺满,高度自定义
    问题:imageView宽度铺满,高度自定义,会出现上下留白的现象(一般比例的还好)解决:<xxx.xxx.xxx.xxx.FullWidthImageViewandroid:id="@+id/iv_image_corp"android:layout_width="match_parent"android:layout_height="wrap_content"......
  • android基本架构
    Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的applicationframework,所有的应用程序都是基于JAVA的applicationframework之上。Android主要应用于ARM平台,但不仅限于ARM,通过编译控制,在X86、MAC等体系结构的机器上同样可以运行。......
  • 【Python】redis 模块_Key-Value 数据库
    RedisRedis是一个开源的基于内存也可持久化的Key-Value数据库,采用ANSIC语言编写。它拥有丰富的数据结构,拥有事务功能,保证命令的原子性。由于是内存数据库,读写非常高速,可达10w/s的评率,所以一般应用于数据变化快、实时通讯、缓存等。但内存数据库通常要考虑机器的......
  • 基于RxJava2+Retrofit2精心打造的Android基础框架
    XSnow基于RxJava2+Retrofit2精心打造的Android基础框架,包含网络、上传、下载、缓存、事件总线、权限管理、数据库、图片加载、UI模块,基本都是项目中必用功能,每个模块充分解耦,可自由拓展。XSnow,X:未知一切,取其通用之意;Snow:雪,取其纯净之意。该框架通用纯净,只依赖公共核心库。项目依赖:c......