Android strings.xml按照key修改

这篇具有很好参考价值的文章主要介绍了Android strings.xml按照key修改。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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文件、字典处理、正则表达式匹配、文件读写和命令行接口设计。文章来源地址https://www.toymoban.com/news/detail-468247.html

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修改的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis模糊匹配并删除Key

    1. 登录可以连接Redis的机器,安装Redis 详情请参见redis-cli连接。 2. 执行以下命令,删除模糊匹配到的Key 说明: [$Addr]为Redis连接地址。 [$Password]为Redis登录密码。 [$Key]为想要删除Key的前缀。 您还可以根据实际情况添加参数,例如-n指定库。 3. 案例 redis中没有直接根据正则表达

    2023年04月08日
    浏览(40)
  • git笔记-url匹配与替换

    在使用bitbake工具构建yocto的场景时遇到了个问题,就是SRC_URI只能以git://开头,才能匹配上bitbake的fetch的git类型匹配; 但实际的git://url.git地址无法访问,然而陷入两难;解决办法如下

    2024年02月13日
    浏览(39)
  • java正则表达式匹配替换大括号变量${}和替换${}变量的值

    java正则表达式替换“$ {}”特殊字符并还原,以及java正则表达式替换${}变量为变量的值这两种操作的代码示例。 正则表达式还是非常有用的, 可以耐心看下定义,多尝试下。 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将

    2024年02月02日
    浏览(61)
  • C++:替换string中的字符

    1.按照位置进行替换 string的成员函数replace可以满足这种需求,其变体有很多种,请参考官方文档,以下列举常用的两种: 运行程序输出: hi world hello world 2.替换指定的字符 如果需要将string中所有指定的字符全部替换,如果使用成员函数replace比较的麻烦,这时可以使用STL的

    2024年02月13日
    浏览(52)
  • SQL中的替换函数replace将字段中的匹配值进行替换

    目录 一、更新替换 二、查询替换   一、更新替换 例:将user表中的address字段中IP1替换为IP2 二、查询替换

    2024年02月16日
    浏览(54)
  • Xshell 提示 “找不到匹配的host key算法”

    记录 Xshell 6 使用中遇到的 “找不到匹配的host key算法” 问题 ssh远程服务器直接弹窗提示 “找不到匹配的host key算法” 首先查看下 sshd 的配置文件 /etc/ssh/sshd_config 确认下里面 HostKey 的配置 经验证, 升级到 Xshell 7 直接解决该问题 把 sshd_config 文件中的 HostKey ...ed25519... 行取消注

    2024年02月16日
    浏览(48)
  • js 关于 replace 取值、替换第几个匹配项

    在日常开发中,经常遇到针对字符串的替换、截取,知识点比较碎容易混淆,特此总结一下,仅供参考。  当直接在被替换字符串恰后加上 / 时,不添加修饰符,就等同于直接字符串替换。  格式:/待替换的字符串/g、/待替换的字符串/mgi。   g:执行全局匹配,替换全部匹

    2024年02月06日
    浏览(42)
  • SSM整合之使用配置类替换xml配置文件(2)

    SSM整合就是将MVC三层架构和框架核心API组件交给SpringIoC容器管理! 一般需要配置两个IoC容器进行三层架构组件管理。 容器名 盛放组件 web容器 web相关组件(controller,springmvc核心组件) root容器 业务和持久层相关组件(service,aop,tx,dataSource,mybatis,mapper等) web容器是root容器的子容

    2024年03月09日
    浏览(53)
  • List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序)

    SpringBoot+Vue3实现登录验证码功能 Java实现发送邮件(定时自动发送邮件) 换个角度使用Redis去解决跨域存取Session问题 Redis缓存穿透、击穿、雪崩问题及解决方法 Spring Cache的使用–快速上手篇 更多该系列文章请查看我的主页哦   根据一些真实需求遇到的问题,需进行排序后

    2024年02月07日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包