主頁 > 移動端開發 > Android strings.xml按照key修改

Android strings.xml按照key修改

2023-06-02 12:08:22 移動端開發

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 = https://www.cnblogs.com/imorning/p/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}.")

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/554117.html

標籤:Android

上一篇:談談ChatGPT是否可以替代人

下一篇:返回列表

標籤雲
其他(160205) Python(38196) JavaScript(25473) Java(18174) C(15236) 區塊鏈(8269) C#(7972) AI(7469) 爪哇(7425) MySQL(7223) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5346) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4581) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1980) 功能(1967) Web開發(1951) HtmlCss(1951) C++(1928) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1879) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • Android strings.xml按照key修改

    ## strings.xml匹配替換 將兩個Android專案中的多語言字串檔案(strings.xml)進行比較,如果其中一個專案中包含另一個專案沒有的字符,則合并到單一的輸出檔案,并以 key 在原始 XML 檔案中更新 value 值。如果key匹配不準確則忽略它。 具體來說: 1. 引入 ......

    uj5u.com 2023-06-02 12:08:22 more
  • 談談ChatGPT是否可以替代人

    起初我以為我是搬磚的,最近發現其實只是一塊磚,哪里需要哪里搬。 ![](https://img2023.cnblogs.com/other/3070683/202306/3070683-20230601071013776-739239962.gif) 這兩天臨時被抽去支援跨平臺相關軟體開發,幫忙畫幾 ......

    uj5u.com 2023-06-01 10:22:09 more
  • 近8萬條中國歷史野史秘聞ACCESS資料庫

    有很多朋友對中國文化歷史相關的資料感興趣,現有的中華上下五千年、世界五千年這類的資料記錄數還太少太少,于是今天就采集了一個中華歷史網站,共有效采集到近8萬條記錄。 分類匯總情況:野史秘聞(12273)、歷史人物(8840)、歷史雜談(7928)、文史百科(5635)、歷史趣聞(5282)、雜說歷史( ......

    uj5u.com 2023-06-01 10:21:04 more
  • Health Kit檔案大變樣,一起嘗鮮!

    Health Kit檔案全新升級,開發場景更清晰,聚焦你關心的問題,快來一起嘗鮮! 檔案入口請戳:[檔案入口~](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/description-000000155 ......

    uj5u.com 2023-05-31 09:54:51 more
  • Flutter三棵樹系列之BuildOwner

    Flutter開發中三棵樹的重要性不言而喻,了解其原理有助于我們開發出性能更優的App,此文主要從原始碼角度介紹Element樹的管理類BuildOwner。 ......

    uj5u.com 2023-05-31 09:54:47 more
  • Health Kit檔案大變樣,一起嘗鮮!

    Health Kit檔案全新升級,開發場景更清晰,聚焦你關心的問題,快來一起嘗鮮! 檔案入口請戳:[檔案入口~](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/description-000000155 ......

    uj5u.com 2023-05-31 09:54:17 more
  • Flutter調優--深入探究MediaQuery引起界面Rebuild的原因及解決辦

    app界面逐漸復雜時,我們不得不考慮去優化界面性能。本文中介紹的例子在開發中是很常見的,如果不了解MediaQuery.of的機制,可能會引起大量使用此方法的界面發生重繪操作,造成頁面卡頓、幀率下降。我們詳細分析了背后的原始碼邏輯,介紹了解決辦法,希望能給大家的調優作業提供些許幫助。 ......

    uj5u.com 2023-05-30 08:19:24 more
  • 了不起的互聯網老男孩,在創業路上不掉隊

    “青春如同奔流的江河,一去不回來不及道別”,老男孩這首歌戳中了太多職場中年男人的心酸苦楚,面對經濟下行壓力、互聯網行業變革以及中年職場危機,互聯網人應該如何應對?如何建立和現實叫板的能力? 有2位在互聯網創業多年的開發者,經歷了從PC互聯網到移動互聯網的發展變遷,踩過不少坑,一路磕磕碰碰走到現在,放 ......

    uj5u.com 2023-05-30 08:19:00 more
  • 了不起的互聯網老男孩,在創業路上不掉隊

    “青春如同奔流的江河,一去不回來不及道別”,老男孩這首歌戳中了太多職場中年男人的心酸苦楚,面對經濟下行壓力、互聯網行業變革以及中年職場危機,互聯網人應該如何應對?如何建立和現實叫板的能力? 有2位在互聯網創業多年的開發者,經歷了從PC互聯網到移動互聯網的發展變遷,踩過不少坑,一路磕磕碰碰走到現在,放 ......

    uj5u.com 2023-05-30 08:18:34 more
  • hybrid探索與實作

    hybrid混合開發是一種離線移動應用開發方式,它結合了Web技術和原生技術,以網頁的形式嵌入到一個原生容器中。 ......

    uj5u.com 2023-05-29 10:20:26 more