Class: Moxml::Adapter::REXMLSAX2Bridge

Inherits:
Object
  • Object
show all
Defined in:
lib/moxml/adapter/rexml.rb

Overview

Bridge between REXML SAX2 and Moxml SAX

Translates REXML::SAX2Parser events to Moxml::SAX::Handler events

Instance Method Summary collapse

Constructor Details

#initialize(handler) ⇒ REXMLSAX2Bridge

Returns a new instance of REXMLSAX2Bridge.



507
508
509
# File 'lib/moxml/adapter/rexml.rb', line 507

def initialize(handler)
  @handler = handler
end

Instance Method Details

#cdata(content) ⇒ Object



539
540
541
# File 'lib/moxml/adapter/rexml.rb', line 539

def cdata(content)
  @handler.on_cdata(content)
end

#characters(text) ⇒ Object



535
536
537
# File 'lib/moxml/adapter/rexml.rb', line 535

def characters(text)
  @handler.on_characters(text)
end

#comment(text) ⇒ Object



543
544
545
# File 'lib/moxml/adapter/rexml.rb', line 543

def comment(text)
  @handler.on_comment(text)
end

#end_documentObject



555
556
557
# File 'lib/moxml/adapter/rexml.rb', line 555

def end_document
  @handler.on_end_document
end

#end_element(_uri, _localname, qname) ⇒ Object



531
532
533
# File 'lib/moxml/adapter/rexml.rb', line 531

def end_element(_uri, _localname, qname)
  @handler.on_end_element(qname)
end

#processing_instruction(target, data) ⇒ Object



547
548
549
# File 'lib/moxml/adapter/rexml.rb', line 547

def processing_instruction(target, data)
  @handler.on_processing_instruction(target, data || "")
end

#progress(position) ⇒ Object



564
565
566
# File 'lib/moxml/adapter/rexml.rb', line 564

def progress(position)
  # Progress callback - we don't need to do anything
end

#start_documentObject



551
552
553
# File 'lib/moxml/adapter/rexml.rb', line 551

def start_document
  @handler.on_start_document
end

#start_element(_uri, _localname, qname, attributes) ⇒ Object

REXML splits element name into uri/localname/qname



512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
# File 'lib/moxml/adapter/rexml.rb', line 512

def start_element(_uri, _localname, qname, attributes)
  # Convert REXML attributes to hash
  attr_hash = {}
  ns_hash = {}

  attributes.each do |name, value|
    if name.to_s.start_with?("xmlns")
      # Namespace declaration
      prefix = name.to_s == "xmlns" ? nil : name.to_s.sub("xmlns:", "")
      ns_hash[prefix] = value
    else
      attr_hash[name.to_s] = value
    end
  end

  # Use qname (qualified name) for element name
  @handler.on_start_element(qname, attr_hash, ns_hash)
end

#xmldecl(version, encoding, standalone) ⇒ Object

REXML calls these but we don’t need to handle them



560
561
562
# File 'lib/moxml/adapter/rexml.rb', line 560

def xmldecl(version, encoding, standalone)
  # XML declaration - we don't need to do anything
end