Module: Ruboto::Util::ScanInAPI
- Included in:
- API
- Defined in:
- lib/ruboto/util/scan_in_api.rb
Instance Method Summary collapse
-
#scan_in_api(file) ⇒ Object
Scan the XML file.
Instance Method Details
#scan_in_api(file) ⇒ Object
Scan the XML file. Much faster than using REXML.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/ruboto/util/scan_in_api.rb', line 9 def scan_in_api(file) require 'strscan' doc = StringScanner.new(file) Thread.current[:api] = XMLElement.new parents = [Thread.current[:api]] while not doc.eos? doc.scan(/</) if doc.scan(/\/\w+>/) parents.pop else name = doc.scan(/\w+/) doc.scan(/\s+/) values = {} while not (term = doc.scan(/[\/>]/)) key = doc.scan(/\w+/) doc.scan(/='/) value = doc.scan(/[^']*/) doc.scan(/'\s*/) values[key] = value.include?("&") ? value.gsub('<', '<').gsub('>', '>').gsub('"', "\"") : value end element = parents[-1].add_element(name, values) parents.push(element) if term == ">" doc.scan(/>/) if term == "/" end end Thread.current[:api] end |