Class: XSD::XMLParser::Nokogiri

Inherits:
Parser
  • Object
show all
Defined in:
lib/xsd/xmlparser/nokogiri.rb

Overview

Nokogiri XML parser for soap4r.

Nokogiri may be used as the XML parser in soap4r. Simply require ‘xsd/xmlparser/nokogiri’ in your soap4r applications, and soap4r will use Nokogiri as it’s XML parser. No other changes should be required to use Nokogiri as the XML parser.

Example (using UW ITS Web Services):

require 'rubygems'
require 'nokogiri'
gem 'soap4r'
require 'defaultDriver'
require 'xsd/xmlparser/nokogiri'

obj = AvlPortType.new
obj.getLatestByRoute(obj.getAgencies.first, 8).each do |bus|
  p "#{bus.routeID}, #{bus.longitude}, #{bus.latitude}"
end

Instance Method Summary collapse

Constructor Details

#initialize(host, opt = {}) ⇒ Nokogiri

Create a new XSD parser with host and opt



31
32
33
34
# File 'lib/xsd/xmlparser/nokogiri.rb', line 31

def initialize(host, opt = {})
  super
  @parser = ::Nokogiri::XML::SAX::Parser.new(self, @charset || "UTF-8")
end

Instance Method Details

#cdata_block(string) ⇒ Object

Handle cdata_blocks containing string



63
64
65
# File 'lib/xsd/xmlparser/nokogiri.rb', line 63

def cdata_block(string)
  characters(string)
end

#do_parse(string_or_readable) ⇒ Object

Start parsing string_or_readable



38
39
40
# File 'lib/xsd/xmlparser/nokogiri.rb', line 38

def do_parse(string_or_readable)
  @parser.parse(string_or_readable)
end

#end_element(name) ⇒ Object

Handle the end_element event with name



50
51
52
# File 'lib/xsd/xmlparser/nokogiri.rb', line 50

def end_element(name)
  super
end

#end_element_namespace(name, prefix = nil, uri = nil) ⇒ Object

Called at the end of an element name is the element’s name prefix is the namespace prefix associated with the element uri is the associated namespace URI



91
92
93
94
95
# File 'lib/xsd/xmlparser/nokogiri.rb', line 91

def end_element_namespace(name, prefix = nil, uri = nil)
  ###
  # Deal with SAX v1 interface
  end_element([prefix, name].compact.join(":"))
end

#error(msg) ⇒ Object Also known as: warning

Handle errors with message msg

Raises:

  • (ParseError)


56
57
58
# File 'lib/xsd/xmlparser/nokogiri.rb', line 56

def error(msg)
  raise ParseError, msg
end

#start_element(name, attrs = []) ⇒ Object

Handle the start_element event with name and attrs



44
45
46
# File 'lib/xsd/xmlparser/nokogiri.rb', line 44

def start_element(name, attrs = [])
  super(name, Hash[*attrs.flatten])
end

#start_element_namespace(name, attrs = [], prefix = nil, uri = nil, ns = []) ⇒ Object

Called at the beginning of an element name is the element name attrs is a list of attributes prefix is the namespace prefix for the element uri is the associated namespace URI ns is a hash of namespace prefix:urls associated with the element



74
75
76
77
78
79
80
81
82
83
84
# File 'lib/xsd/xmlparser/nokogiri.rb', line 74

def start_element_namespace(name, attrs = [], prefix = nil, uri = nil, ns = []) # rubocop:disable Metrics/ParameterLists
  ###
  # Deal with SAX v1 interface
  name = [prefix, name].compact.join(":")
  attributes = ns.map do |ns_prefix, ns_uri|
    [["xmlns", ns_prefix].compact.join(":"), ns_uri]
  end + attrs.map do |attr|
    [[attr.prefix, attr.localname].compact.join(":"), attr.value]
  end.flatten
  start_element(name, attributes)
end