Ruby/XML/xmlparser

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск

Use XML parser

require "xmlparser"
class XMLRetry<Exception; end
class SampleParser<XMLParser
  private
  def startElement(name, attr)
    if name == "person"
       attr.each do |key, value|
         print "Found person of type #{value}.\n"
       end
    end
    if name == "name"
      $print_cdata = true
      self.defaultCurrent
    else
      $print_cdata = false
    end
  end
  def endElement(name)
    if name == "name"
      $print_cdata = false
    end
  end
  def character(data)
    if $print_cdata
      puts ("\tName is: #{data}")
    end
  end
end
xml = $<.read
parser = SampleParser.new
def parser.unknownEncoding(e)
  raise XMLRetry, e
end
begin
  parser.parse(xml)
rescue XMLRetry
  newencoding = nil
  e = $!.to_s
  parser = SampleParser.new(newencoding)
  retry
rescue XMLParserError
  line = parser.line
  print "Parse error(#{line}): #{$!}\n"
end