2

我想使用基于 Ruby 的脚本来遍历 Android 中的 strings.xml 文件以更新某些值。例如:这是原始的xml文件

<resources>
   <string name="accounts">accounts</string>
</resources>

我希望它在运行 ruby​​ 脚本后变成这样:

<resources>
   <string name="accounts">my accounts</string>
</resources>

我对 ruby​​ 完全陌生,但我能够让它读取一个 xml 文件....只是不确定如何更新这些值。

(如果您想知道,我这样做是为了给我的应用贴上白标签并将其出售给企业。这将有助于加快流程。)

4

3 回答 3

4

我找到了一种方法。

  require 'rubygems'
  require 'nokogiri'

  #opens the xml file
  io = File.open('/path/to/my/strings.xml', 'r')
  doc = Nokogiri::XML(io)
  io.close

  #this line looks for something like this: "<string name="nameOfStringAttribute">myString</string>"
  doc.search("//string[@name='nameOfStringAttribute']").each do |string|

  #this line updates the string value
  string.content = "new Text -- IT WORKED!!!!"

  #this section writes back to the original file
  output = File.open('/path/to/my/strings.xml', "w")
  output << doc
  output.close

  end
于 2013-05-10T20:35:48.067 回答
0

请注意,如果您正在使用来自 android 代码的 strings.xml 文件中的资源,使用R.string该类,那么在外部修改 XML 将不起作用。

该类R.string是在您编译应用程序时创建的,因此如果您在编译后修改 XML 文件,更改将不会在您的应用程序中生效。

于 2013-05-10T19:08:39.750 回答
0

超级有帮助!为了后代……我选择了:

doc = Nokogiri::XML(File.open('path_to/strings.xml')))

doc.search("//string[@name='my_string_attribute']").first.content = "my new string value"

File.open('path_to/strings.xml', 'w') { |f| f.print(doc.to_xml) }

当您的字符串键(名称)是唯一的(Android Studio 强制执行,因此您可以相信它们会是唯一的)时,这很有效。您可以在中间进行尽可能多的字符串编辑,然后保存更改,而不必担心会弄乱任何其他值。

于 2016-08-18T03:55:26.777 回答