class Aio::Module::InputStyle::CompareXML
Public Class Methods
new()
click to toggle source
Calls superclass method
Aio::Module::InputStyle::new
# File lib/modules/input/style/compare_xml.rb, line 11 def initialize super({ :author => "Elin", :description => "这个模块用于分析由output/out_compare_xml模块生成的xml文件", :platform => "all", :file_suffix => Regexp.new('\.xml$'), :pass_file => [], }) end
Public Instance Methods
convert(e)
click to toggle source
转换恢复会出错字符串
# File lib/modules/input/style/compare_xml.rb, line 83 def convert(e) #/__/.match(e) ? e.gsub!('__', '/').to_sym : e.to_sym e.gsub!('__', '/') if /__/.match(e) e.gsub!(/^_i/, '') if /^_i/.match(e) e.to_sym end
parse()
click to toggle source
# File lib/modules/input/style/compare_xml.rb, line 21 def parse # dir 为 Pathname 类 print_good "正在打开文件 #{self.input_file}" file = File.open(self.input_file) print_good "打开文件完成" print_good "正在载入到XML模块..." atime = Time.now doc = Document.new(file) root = doc.root print_good "载入完成。载入用时 #{format("%.2fs", Time.now.to_f - atime.to_f)}" device_hash = {} index = 0 total = root.elements.size print_good "开始比对分析..." # 按每台设备解析XML root.elements.each do |device| index += 1 info = {} device_name = device.attributes['device_name'] device_hash[device_name] = info # 按照每个cmd解析XML device.elements.each do |cmd| i = {} ch = cmd.name cmd_name = cmd.attributes['cmd'] # 当同一个cmd有两个symbol时 if info[cmd_name].nil? info[cmd_name] = {ch.to_sym => i} else info[cmd_name][ch.to_sym] = i end # 进度条 progress_bar(total, index, device_name) # 还有一种情况是当<attr cmd='show' val='var'/> # 此时就可以直接将val填入 attr_val = cmd.attributes['val'] attr_val ? info[cmd_name][ch.to_sym] = attr_val : to_h(cmd, i) end end clear_line return device_hash end
to_h(xml, hash)
click to toggle source
# File lib/modules/input/style/compare_xml.rb, line 70 def to_h(xml, hash) xml.elements.each do |e| if e.has_elements? son = {} hash[convert(e.name)] = son to_h(e, son) else hash[convert(e.name)] = e.attributes['val'] end end end