覆盖XML标记内容

时间:2016-03-18 10:24:01

标签: ruby regex xml

我有一个XML文件。 例如:

awaitTermination()

如果<string name="example1">example1</string> <string name="example2">example2</string> <string name="example3" warning="true">example3</string> <string name="example4">example4</string> <string name="example5"warning="true">example5</string> <string name="example6">example6</string> ,我想创建一个包含<WARNING[[" "]]>的脚本。

目的是:

warning="true"

我创建了脚本:

<string name="example1">example1</string>
<string name="example2">example2</string>
<string name="example3" warning="true"><WARNING[[example3]]></string>
<string name="example4">example4</string>
<string name="example5"warning="true"><WARNING[[example5]]></string>
<string name="example6">example6</string>

但它不起作用。

2 个答案:

答案 0 :(得分:1)

你的xml似乎不是一个单独的xml文档,除非你只粘贴了它的一部分,但是下面的内容应该有效:

require 'nokogiri'

output=File.open("./#{ARGV[0]}").readlines.map do |line|
  doc = Nokogiri::XML(line)
  doc.xpath("//string[@warning='true']").map{|m| m.content = "WARNING[[\"{m.text}\"]]"}
  doc.root.to_s
end.join("\n")

f = File.new("test.xml", "w") {|f| f.write(output) }

如果您实际传入一个xml文档但需要进行轻微修改,但它们相当简单。

答案 1 :(得分:0)

我怎么看:

input.gsub(/(<string name=".*?" warning="true">)(.*?)(<\/string>)/, '\1<WARNING[[\2]]>\3')

将对某个群组的引用用作\n,其中n是一个群组号